Spec-Zone.ru › Python 3.12

Объекты функций

Существует несколько функций, специфичных для функций 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API