Объекты функций
Существует несколько функций, специфичных для функций Python.
-
type PyFunctionObject -
Структура C, используемая для функций.
-
PyTypeObject PyFunction_Type -
Это экземпляр
PyTypeObjectи представляет собой тип Python-функции. Он предоставляется программистам Python какtypes.FunctionType.
-
int PyFunction_Check(PyObject *o) -
Возвращает true, если o — это объект функции (имеет тип
PyFunction_Type). Параметр не должен бытьNULL. Эта функция всегда выполняется успешно.
-
PyObject *PyFunction_New(PyObject *code, PyObject *globals) -
Значение возврата: Новый ссылка.
Возвращает новый объект функции, связанный с объектом кода code. globals должен быть словарем с глобальными переменными, доступными для функции.
Документация и имя функции извлекаются из объекта кода.
__module__извлекается из globals. Значения по умолчанию аргументов, аннотации и замыкание установлены вNULL.__qualname__устанавливается в такое же значение, как полеco_qualnameобъекта кода.
-
PyObject *PyFunction_NewWithQualName(PyObject *code, PyObject *globals, PyObject *qualname) -
Значение возврата: Новый ссылка.
Как
PyFunction_New(), но также позволяет установить атрибут__qualname__объекта функции. qualname должен быть объектом unicode илиNULL; еслиNULL, атрибут__qualname__устанавливается в такое же значение, как полеco_qualnameобъекта кода.Добавлен в версии 3.3.
-
PyObject *PyFunction_GetCode(PyObject *op) -
Значение возврата: Заимствованная ссылка.
Возвращает объект кода, связанный с объектом функции op.
-
PyObject *PyFunction_GetGlobals(PyObject *op) -
Значение возврата: Заимствованная ссылка.
Возвращает словарь globals, связанный с объектом функции op.
-
PyObject *PyFunction_GetModule(PyObject *op) -
Значение возврата: Заимствованная ссылка.
Возвращает заимствованную ссылку на атрибут
__module__объекта функции op. Может быть NULL.Обычно это
stringсодержащий имя модуля, но может быть установлено любым другим объектом кодом Python.
-
PyObject *PyFunction_GetDefaults(PyObject *op) -
Значение возврата: Заимствованная ссылка.
Возвращает значения аргументов по умолчанию для объекта функции op. Это может быть кортеж аргументов или
NULL.
-
int PyFunction_SetDefaults(PyObject *op, PyObject *defaults) -
Устанавливает значения аргументов по умолчанию для объекта функции op. defaults должен быть
Py_Noneили кортежем.Вызывает
SystemErrorи возвращает-1при ошибке.
-
void PyFunction_SetVectorcall(PyFunctionObject *func, vectorcallfunc vectorcall) -
Устанавливает поле vectorcall данного объекта функции func.
Предупреждение: расширения, использующие этот API, должны сохранить поведение неизмененной (по умолчанию) функции vectorcall!
Добавлен в версии 3.12.
-
PyObject *PyFunction_GetClosure(PyObject *op) -
Значение возврата: Заимствованная ссылка.
Возвращает замыкание, связанное с объектом функции op. Это может быть
NULLили кортеж объектов ячеек.
-
int PyFunction_SetClosure(PyObject *op, PyObject *closure) -
Устанавливает замыкание, связанное с объектом функции op. closure должен быть
Py_Noneили кортежем объектов ячеек.Вызывает
SystemErrorи возвращает-1при ошибке.
-
PyObject *PyFunction_GetAnnotations(PyObject *op) -
Значение возврата: Заимствованная ссылка.
Возвращает аннотации объекта функции op. Это может быть изменяемый словарь или
NULL.
-
int PyFunction_SetAnnotations(PyObject *op, PyObject *annotations) -
Устанавливает аннотации для объекта функции op. annotations должен быть словарем или
Py_None.Вызывает
SystemErrorи возвращает-1при ошибке.
-
int PyFunction_AddWatcher(PyFunction_WatchCallback callback) -
Регистрирует callback как наблюдателя функций для текущего интерпретатора. Возвращает идентификатор, который можно передать в
PyFunction_ClearWatcher(). В случае ошибки (например, больше нет доступных идентификаторов наблюдателей) возвращает-1и устанавливает исключение.Добавлен в версии 3.12.
-
int PyFunction_ClearWatcher(int watcher_id) -
Удаляет наблюдателя, идентифицированного по watcher_id, ранее возвращенному из
PyFunction_AddWatcher()для текущего интерпретатора. Возвращает0при успехе или-1и устанавливает исключение при ошибке (например, если заданный watcher_id никогда не регистрировался).Добавлен в версии 3.12.
-
type PyFunction_WatchEvent -
Перечисление возможных событий наблюдателей функций: -
PyFunction_EVENT_CREATE-PyFunction_EVENT_DESTROY-PyFunction_EVENT_MODIFY_CODE-PyFunction_EVENT_MODIFY_DEFAULTS-PyFunction_EVENT_MODIFY_KWDEFAULTSДобавлен в версии 3.12.
-
typedef int (*PyFunction_WatchCallback)(PyFunction_WatchEvent event, PyFunctionObject *func, PyObject *new_value) -
Тип функции обратного вызова наблюдателя функций.
Если event равен
PyFunction_EVENT_CREATEилиPyFunction_EVENT_DESTROY, то new_value будетNULL. В противном случае new_value будет содержать заимствованную ссылку на новое значение, которое должно быть сохранено в func для атрибута, который изменяется.Обратный вызов может проверять, но не должен изменять func; это может привести к непредсказуемым последствиям, включая бесконечную рекурсию.
Если event равен
PyFunction_EVENT_CREATE, то обратный вызов вызывается после того, какfuncбыл полностью инициализирован. В противном случае обратный вызов вызывается до изменения func, поэтому можно проверить предыдущее состояние func. Интерпретатор разрешается оптимизировать удаление объектов функций, когда это возможно. В таких случаях никакого события не будет испускаться. Хотя это создает возможность наблюдаемого различия в поведении выполнения в зависимости от решений оптимизации, это не изменяет семантику выполняемого кода Python.Если event равен
PyFunction_EVENT_DESTROY, то взятие ссылки на обратный вызов к почти уничтоженной функции оживит ее, предотвращая освобождение в этот момент. Когда оживленный объект будет уничтожен позже, все активные обратные вызовы наблюдателей будут вызваны снова.Если обратный вызов установит исключение, он должен вернуть
-1; это исключение будет отображено как необрабатываемое исключение с помощьюPyErr_WriteUnraisable(). В противном случае он должен вернуть0.При входе в обратный вызов может быть установлено ожидающее исключение. В этом случае обратный вызов должен вернуть
0с тем же установленным исключением. Это означает, что обратный вызов не может вызвать никакой другой API, который может установить исключение, если он не сохранит и не очистит состояние исключения предварительно, а восстановит его перед возвратом.Добавлен в версии 3.12.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/c-api/function.html