Spec-Zone.ru › Python 3.13

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

Существует несколько функций, специфичных для функций 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)
Значение возврата: Заимствованная ссылка.

Возвращает словарь глобальных переменных, связанный с объектом функции 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.13/c-api/function.html

Spec-Zone.ru

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