Funktionsobjekt

Det finns några funktioner som är specifika för Python-funktioner.

type PyFunctionObject

Den C-struktur som används för funktioner.

PyTypeObject PyFunction_Type

Detta är en instans av PyTypeObject och representerar Pythons funktionstyp. Den är exponerad för Python-programmerare som types.FunctionType.

int PyFunction_Check(PyObject *o)

Returnerar true om o är ett funktionsobjekt (har typen PyFunction_Type). Parametern får inte vara NULL. Denna funktion lyckas alltid.

PyObject *PyFunction_New(PyObject *code, PyObject *globals)
Returnera värde: Ny referens.

Returnerar ett nytt funktionsobjekt som är associerat med kodobjektet code. globals måste vara en ordbok med de globala variabler som är tillgängliga för funktionen.

Funktionens docstring och namn hämtas från kodobjektet. __module__ hämtas från globals. Argumentets standardvärden, annoteringar och avslutning sätts till NULL. __qualname__ sätts till samma värde som kodobjektets fält co_qualname`.

PyObject *PyFunction_NewWithQualName(PyObject *code, PyObject *globals, PyObject *qualname)
Returnera värde: Ny referens.

Som PyFunction_New(), men tillåter även inställning av funktionsobjektets attribut __qualname__. qualname bör vara ett unicode-objekt eller NULL; om NULL, sätts attributet __qualname__` till samma värde som kodobjektets fält co_qualname`.

Tillagd i version 3.3.

PyObject *PyFunction_GetCode(PyObject *op)
Returnera värde: Lånad referens.

Returnerar kodobjektet som är associerat med funktionsobjektet op.

PyObject *PyFunction_GetGlobals(PyObject *op)
Returnera värde: Lånad referens.

Returnerar globals-ordlistan som är kopplad till funktionsobjektet op.

PyObject *PyFunction_GetModule(PyObject *op)
Returnera värde: Lånad referens.

Returnerar en lånad referens till attributet __module__ i funktionsobjektet op. Det kan vara NULL.

Detta är normalt en string som innehåller modulnamnet, men kan ställas in på vilket annat objekt som helst av Python-kod.

PyObject *PyFunction_GetDefaults(PyObject *op)
Returnera värde: Lånad referens.

Returnerar standardvärdena för argumenten i funktionsobjektet op. Detta kan vara en tupel av argument eller NULL.

int PyFunction_SetDefaults(PyObject *op, PyObject *defaults)

Ställ in argumentens standardvärden för funktionsobjektet op. defaults måste vara Py_None eller en tupel.

Utlöser SystemError och returnerar -1 vid misslyckande.

void PyFunction_SetVectorcall(PyFunctionObject *func, vectorcallfunc vectorcall)

Ställ in vectorcall-fältet för ett givet funktionsobjekt func.

Varning: Tillägg som använder detta API måste bevara beteendet hos den oförändrade (standard) vectorcall-funktionen!

Tillagd i version 3.12.

PyObject *PyFunction_GetKwDefaults(PyObject *op)
Returnera värde: Lånad referens.

Returnerar standardvärdena för nyckelordsbaserade argument för funktionsobjektet op. Detta kan vara en ordlista med argument eller NULL.

PyObject *PyFunction_GetClosure(PyObject *op)
Returnera värde: Lånad referens.

Returnerar den closure som är associerad med funktionsobjektet op. Detta kan vara NULL eller en tupel av cellobjekt.

int PyFunction_SetClosure(PyObject *op, PyObject *closure)

Ställ in den closure som är associerad med funktionsobjektet op. closure måste vara Py_None eller en tupel av cellobjekt.

Utlöser SystemError och returnerar -1 vid misslyckande.

PyObject *PyFunction_GetAnnotations(PyObject *op)
Returnera värde: Lånad referens.

Returnerar anteckningarna för funktionsobjektet op. Detta kan vara en föränderlig ordbok eller NULL.

int PyFunction_SetAnnotations(PyObject *op, PyObject *annotations)

Ställ in annoteringarna för funktionsobjektet op. annotations måste vara en ordbok eller Py_None.

Utlöser SystemError och returnerar -1 vid misslyckande.

PyObject *PyFunction_GET_CODE(PyObject *op)
PyObject *PyFunction_GET_GLOBALS(PyObject *op)
PyObject *PyFunction_GET_MODULE(PyObject *op)
PyObject *PyFunction_GET_DEFAULTS(PyObject *op)
PyObject *PyFunction_GET_KW_DEFAULTS(PyObject *op)
PyObject *PyFunction_GET_CLOSURE(PyObject *op)
PyObject *PyFunction_GET_ANNOTATIONS(PyObject *op)
Returnera värde: Lånad referens.

Dessa funktioner liknar sina motsvarigheter i PyFunction_Get*, men gör ingen typkontroll. Att skicka något annat än en instans av PyFunction_Type är ett odefinierat beteende.

int PyFunction_AddWatcher(PyFunction_WatchCallback callback)

Registrera callback som en funktionsvakt för den aktuella tolken. Returnerar ett ID som kan skickas till PyFunction_ClearWatcher(). I händelse av fel (t.ex. inga fler ID:n tillgängliga), returnera -1 och sätt ett undantag.

Tillagd i version 3.12.

int PyFunction_ClearWatcher(int watcher_id)

Rensa den observatör som identifieras av watcher_id och som tidigare returnerats från PyFunction_AddWatcher() för den aktuella tolken. Returnerar 0 vid framgång, eller -1 och sätter ett undantag vid fel (t.ex. om det givna watcher_id aldrig registrerades)

Tillagd i version 3.12.

type PyFunction_WatchEvent

Uppräkning av möjliga händelser för funktionsövervakare:

  • PyFunction_EVENT_CREATE

  • PyFunction_EVENT_DESTROY

  • PyFunction_EVENT_MODIFY_CODE

  • PyFunction_EVENT_MODIFY_DEFAULTS

  • PyFunction_EVENT_MODIFY_KWDEFAULTS

Tillagd i version 3.12.

typedef int (*PyFunction_WatchCallback)(PyFunction_WatchEvent event, PyFunctionObject *func, PyObject *new_value)

Typ av en funktion som är en Watcher callback-funktion.

Om event är PyFunction_EVENT_CREATE eller PyFunction_EVENT_DESTROY så kommer new_value att vara NULL. Annars kommer new_value att innehålla en lånad referens till det nya värde som ska lagras i func för det attribut som modifieras.

Återkallelsen kan inspektera men får inte modifiera func; om så sker kan det få oförutsägbara effekter, inklusive oändlig rekursion.

Om event är PyFunction_EVENT_CREATE, anropas återuppringningen efter att func har initialiserats fullständigt. Annars anropas återuppringningen innan modifieringen av func äger rum, så att det tidigare tillståndet för func kan inspekteras. Körtiden tillåts optimera bort skapandet av funktionsobjekt när så är möjligt. I sådana fall kommer ingen händelse att sändas ut. Även om detta skapar en möjlighet till en observerbar skillnad i körtidsbeteende beroende på optimeringsbeslut, ändrar det inte semantiken i den Python-kod som exekveras.

Om event är PyFunction_EVENT_DESTROY kommer en referens i callbacken till den funktion som ska förstöras att återuppliva den, vilket förhindrar att den frigörs vid denna tidpunkt. När det återupplivade objektet förstörs senare, kommer alla watcher callbacks som är aktiva vid den tidpunkten att anropas igen.

Om callbacken anger ett undantag måste den returnera -1; detta undantag kommer att skrivas ut som ett undantag som inte kan bedömas med PyErr_WriteUnraisable(). Annars bör det returnera 0.

Det kan redan finnas ett väntande undantag inställt vid ingången till återuppringningen. I detta fall bör återuppringningen returnera 0 med samma undantag fortfarande inställt. Detta innebär att återuppringningen inte får anropa något annat API som kan ställa in ett undantag om det inte sparar och rensar undantagstillståndet först och återställer det innan det returneras.

Tillagd i version 3.12.