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 somtypes.FunctionType
.
-
int PyFunction_Check(PyObject *o)¶
Returnerar true om o är ett funktionsobjekt (har typen
PyFunction_Type
). Parametern får inte varaNULL
. 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 tillNULL
.__qualname__
sätts till samma värde som kodobjektets fältco_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 ellerNULL
; omNULL
, sätts attributet__qualname__`
till samma värde som kodobjektets fältco_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 avPyFunction_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. Returnerar0
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
ellerPyFunction_EVENT_DESTROY
så kommer new_value att varaNULL
. 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 medPyErr_WriteUnraisable()
. Annars bör det returnera0
.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.