Функциональные объекты¶
Есть несколько функций, специфичных для 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 должен быть объектом юникода илиNULL
; еслиNULL
, то атрибут__qualname__
устанавливается в то же значение, что и полеco_qualname
объекта кода.Added in version 3.3.
-
PyObject *PyFunction_GetCode(PyObject *op)¶
- Возвращаемое значение: Заимствованная ссылка.
Возвращает объект кода, связанный с объектом функции op.
-
PyObject *PyFunction_GetGlobals(PyObject *op)¶
- Возвращаемое значение: Заимствованная ссылка.
Возвращает словарь globals, связанный с объектом функции op.
-
PyObject *PyFunction_GetModule(PyObject *op)¶
- Возвращаемое значение: Заимствованная ссылка.
Возвращает borrowed reference атрибуту
__module__
атрибута function object оп. Он может быть 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!
Added in version 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. Аннотации должны быть словарем или
Py_None
.Поднимает
SystemError
и возвращает-1
при неудаче.
-
int PyFunction_AddWatcher(PyFunction_WatchCallback callback)¶
Зарегистрируйте callback в качестве наблюдателя функций для текущего интерпретатора. Возвращает идентификатор, который может быть передан в
PyFunction_ClearWatcher()
. В случае ошибки (например, нет больше доступных идентификаторов наблюдателя) верните-1
и установите исключение.Added in version 3.12.
-
int PyFunction_ClearWatcher(int watcher_id)¶
Очистить наблюдателя, идентифицированного watcher_id, ранее возвращенного из
PyFunction_AddWatcher()
для текущего интерпретатора. Возвращает0
в случае успеха, или-1
и устанавливает исключение в случае ошибки (например, если данный watcher_id никогда не был зарегистрирован).Added in version 3.12.
-
type PyFunction_WatchEvent¶
Перечисление возможных событий наблюдателя функции: -
PyFunction_EVENT_CREATE
-PyFunction_EVENT_DESTROY
-PyFunction_EVENT_MODIFY_CODE
-PyFunction_EVENT_MODIFY_DEFAULTS
-PyFunction_EVENT_MODIFY_KWDEFAULTS
Added in version 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 будет содержать borrowed reference для нового значения, которое будет сохранено в func для изменяемого атрибута.Обратный вызов может проверять, но не должен изменять func; это может привести к непредсказуемым последствиям, включая бесконечную рекурсию.
Если event - это
PyFunction_EVENT_CREATE
, то обратный вызов вызывается после полной инициализации func. В противном случае обратный вызов вызывается до модификации func, так что предыдущее состояние func может быть проверено. Времени выполнения разрешается оптимизировать создание объектов функций, если это возможно. В таких случаях событие не будет испускаться. Хотя это создает возможность заметного различия в поведении времени выполнения в зависимости от решений по оптимизации, это не меняет семантику выполняемого кода Python.Если event имеет значение
PyFunction_EVENT_DESTROY
, взятие ссылки в обратном вызове функции, собирающейся быть уничтоженной, воскресит ее, предотвращая ее освобождение в это время. Когда воскрешенный объект будет уничтожен позже, все активные на тот момент обратные вызовы наблюдателя будут вызваны снова.Если обратный вызов устанавливает исключение, он должен вернуть
-1
; это исключение будет выведено как нераскрываемое исключение с помощьюPyErr_WriteUnraisable()
. В противном случае он должен вернуть0
.При входе в обратный вызов уже может быть установлено исключение. В этом случае обратный вызов должен вернуть
0
с тем же самым исключением, которое все еще установлено. Это означает, что обратный вызов не может вызывать другие API, которые могут установить исключение, если только он не сохранит и не очистит состояние исключения сначала, а затем восстановит его перед возвратом.Added in version 3.12.