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