Funktionsobjekte¶
Es gibt einige Funktionen, die spezifisch für Python-Funktionen sind.
-
type PyFunctionObject¶
Die C-Struktur, die für Funktionen verwendet wird.
-
PyTypeObject PyFunction_Type¶
Dies ist eine Instanz von
PyTypeObjectund repräsentiert den Python-Funktionstyp. Sie wird Python-Programmierern alstypes.FunctionTypezur Verfügung gestellt.
-
int PyFunction_Check(PyObject *o)¶
Gibt wahr zurück, wenn o ein Funktions-Objekt ist (Typ
PyFunction_Type). Der Parameter darf nichtNULLsein. Diese Funktion schlägt niemals fehl.
-
PyObject *PyFunction_New(PyObject *code, PyObject *globals)¶
- Rückgabewert: Neue Referenz.
Gibt ein neues Funktions-Objekt zurück, das mit dem Code-Objekt code verknüpft ist. globals muss ein Wörterbuch mit den globalen Variablen sein, auf die von der Funktion zugegriffen werden kann.
Der Docstring und der Name der Funktion werden aus dem Code-Objekt abgerufen.
__module__wird aus globals abgerufen. Die Argument-Defaults, Annotationen und der Closure werden aufNULLgesetzt.__qualname__wird auf denselben Wert gesetzt wie das Feldco_qualnamedes Code-Objekts.
-
PyObject *PyFunction_NewWithQualName(PyObject *code, PyObject *globals, PyObject *qualname)¶
- Rückgabewert: Neue Referenz.
Wie
PyFunction_New(), aber erlaubt auch das Setzen des Attributs__qualname__des Funktions-Objekts. qualname sollte ein Unicode-Objekt oderNULLsein; wennNULL, wird das Attribut__qualname__auf denselben Wert wie das Feldco_qualnamedes Code-Objekts gesetzt.Hinzugefügt in Version 3.3.
-
PyObject *PyFunction_GetCode(PyObject *op)¶
- Rückgabewert: Entliehene Referenz.
Gibt das Code-Objekt zurück, das mit dem Funktions-Objekt op verknüpft ist.
-
PyObject *PyFunction_GetGlobals(PyObject *op)¶
- Rückgabewert: Entliehene Referenz.
Gibt das Globals-Dictionary zurück, das mit dem Funktions-Objekt op verknüpft ist.
-
PyObject *PyFunction_GetModule(PyObject *op)¶
- Rückgabewert: Entliehene Referenz.
Gibt eine ausgeliehene Referenz auf das Attribut
__module__des Funktions-Objekts op zurück. Es kannNULLsein.Dies ist normalerweise ein
String, der den Modulnamen enthält, kann aber von Python-Code auf jedes andere Objekt gesetzt werden.
-
PyObject *PyFunction_GetDefaults(PyObject *op)¶
- Rückgabewert: Entliehene Referenz.
Gibt die Argument-Standardwerte des Funktions-Objekts op zurück. Dies kann ein Tupel von Argumenten oder
NULLsein.
-
int PyFunction_SetDefaults(PyObject *op, PyObject *defaults)¶
Setzt die Argument-Standardwerte für das Funktions-Objekt op. defaults muss
Py_Noneoder ein Tupel sein.Löst
SystemErroraus und gibt bei einem Fehler-1zurück.
-
void PyFunction_SetVectorcall(PyFunctionObject *func, vectorcallfunc vectorcall)¶
Setzt das Vektordatenfeld eines gegebenen Funktions-Objekts func.
Warnung: Erweiterungen, die diese API verwenden, müssen das Verhalten der unveränderten (Standard-)Vektordatenfunktion beibehalten!
Hinzugefügt in Version 3.12.
-
PyObject *PyFunction_GetKwDefaults(PyObject *op)¶
- Rückgabewert: Entliehene Referenz.
Gibt die Standardwerte für schlüsselwortbezogene Argumente des Funktions-Objekts op zurück. Dies kann ein Wörterbuch von Argumenten oder
NULLsein.
-
PyObject *PyFunction_GetClosure(PyObject *op)¶
- Rückgabewert: Entliehene Referenz.
Gibt den Closure zurück, der mit dem Funktions-Objekt op verknüpft ist. Dies kann
NULLoder ein Tupel von Cell-Objekten sein.
-
int PyFunction_SetClosure(PyObject *op, PyObject *closure)¶
Setzt den Closure, der mit dem Funktions-Objekt op verknüpft ist. closure muss
Py_Noneoder ein Tupel von Cell-Objekten sein.Löst
SystemErroraus und gibt bei einem Fehler-1zurück.
-
PyObject *PyFunction_GetAnnotations(PyObject *op)¶
- Rückgabewert: Entliehene Referenz.
Gibt die Annotationen des Funktions-Objekts op zurück. Dies kann ein veränderbares Wörterbuch oder
NULLsein.
-
int PyFunction_SetAnnotations(PyObject *op, PyObject *annotations)¶
Setzt die Annotationen für das Funktions-Objekt op. annotations muss ein Wörterbuch oder
Py_Nonesein.Löst
SystemErroraus und gibt bei einem Fehler-1zurück.
-
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)¶
- Rückgabewert: Entliehene Referenz.
Diese Funktionen sind ihren
PyFunction_Get*Gegenstücken ähnlich, führen aber keine Typüberprüfung durch. Die Übergabe von etwas anderem als einer Instanz vonPyFunction_Typehat undefiniertes Verhalten.
-
int PyFunction_AddWatcher(PyFunction_WatchCallback callback)¶
Registriert callback als Funktions-Watcher für den aktuellen Interpreter. Gibt eine ID zurück, die an
PyFunction_ClearWatcher()übergeben werden kann. Im Fehlerfall (z. B. keine weiteren Watcher-IDs verfügbar) gibt die Funktion-1zurück und setzt eine Exception.Hinzugefügt in Version 3.12.
-
int PyFunction_ClearWatcher(int watcher_id)¶
Löscht den Watcher, der durch watcher_id identifiziert wird und zuvor von
PyFunction_AddWatcher()für den aktuellen Interpreter zurückgegeben wurde. Gibt0bei Erfolg zurück oder-1und setzt eine Exception im Fehlerfall (z. B. wenn die angegebene watcher_id nie registriert wurde).Hinzugefügt in Version 3.12.
-
type PyFunction_WatchEvent¶
Aufzählung möglicher Funktions-Watcher-Ereignisse
PyFunction_EVENT_CREATEPyFunction_EVENT_DESTROYPyFunction_EVENT_MODIFY_CODEPyFunction_EVENT_MODIFY_DEFAULTSPyFunction_EVENT_MODIFY_KWDEFAULTS
Hinzugefügt in Version 3.12.
-
typedef int (*PyFunction_WatchCallback)(PyFunction_WatchEvent event, PyFunctionObject *func, PyObject *new_value)¶
Typ einer Funktions-Watcher-Callback-Funktion.
Wenn event
PyFunction_EVENT_CREATEoderPyFunction_EVENT_DESTROYist, ist new_valueNULL. Andernfalls enthält new_value eine ausgeliehene Referenz auf den neuen Wert, der in func für das zu ändernde Attribut gespeichert werden soll.Der Callback kann func inspizieren, darf ihn aber nicht modifizieren; dies könnte unvorhersehbare Auswirkungen haben, einschließlich einer Endlosschleife.
Wenn event
PyFunction_EVENT_CREATEist, wird der Callback aufgerufen, nachdem func vollständig initialisiert wurde. Andernfalls wird der Callback vor der Änderung von func aufgerufen, sodass der vorherige Zustand von func inspiziert werden kann. Die Laufzeitumgebung darf die Erstellung von Funktions-Objekten nach Möglichkeit optimieren. In solchen Fällen wird kein Ereignis ausgegeben. Obwohl dies die Möglichkeit eines erkennbaren Unterschieds im Laufzeitverhalten je nach Optimierungsentscheidungen schafft, ändert es nicht die Semantik des ausgeführten Python-Codes.Wenn event
PyFunction_EVENT_DESTROYist, wird durch das Ergreifen einer Referenz im Callback auf die kurz vor der Zerstörung stehende Funktion diese wiederhergestellt und verhindert, dass sie zu diesem Zeitpunkt freigegeben wird. Wenn das wiederhergestellte Objekt später zerstört wird, werden alle zu diesem Zeitpunkt aktiven Watcher-Callbacks erneut aufgerufen.Wenn der Callback eine Ausnahme setzt, muss er
-1zurückgeben; diese Ausnahme wird als nicht aufhebbare Ausnahme mitPyErr_WriteUnraisable()ausgegeben. Andernfalls sollte er0zurückgeben.Es kann bereits eine ausstehende Ausnahme beim Eintritt in den Callback gesetzt sein. In diesem Fall sollte der Callback
0zurückgeben, wobei die Ausnahme weiterhin gesetzt ist. Das bedeutet, der Callback darf keine andere API aufrufen, die eine Ausnahme setzen kann, es sei denn, er speichert und löscht zuerst den Ausnahmezustand und stellt ihn vor der Rückgabe wieder her.Hinzugefügt in Version 3.12.