> **Источник:** https://python-all.ru/3.8/c-api/function.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

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

Есть несколько функций, специфичных для функций Python.

**`PyFunctionObject`**

C-структура, используемая для функций.

**[PyTypeObject](https://python-all.ru/3.8/c-api/type.html#c.PyTypeObject) `PyFunction_Type`**

Это экземпляр [`PyTypeObject`](https://python-all.ru/3.8/c-api/type.html#c.PyTypeObject) и представляет тип функции Python. Он доступен программистам на Python как `types.FunctionType`.

#### `int PyFunction_Check(PyObject *o)`

Возвращает true, если *o* является объектом функции (имеет тип [`PyFunction_Type`](https://python-all.ru/3.8/c-api/function.html#c.PyFunction_Type)). Параметр не должен быть `NULL`.

#### `PyObject* PyFunction_New(PyObject *code, PyObject *globals)`

*Возвращаемое значение: новая ссылка.*

Возвращает новый объект функции, связанный с объектом кода *code*. *globals* должен быть словарём с глобальными переменными, доступными функции.

Докстринг и имя функции извлекаются из объекта кода. *\_\_module\_\_* извлекается из *globals*. Значения по умолчанию аргументов, аннотации и замыкание устанавливаются в `NULL`. *\_\_qualname\_\_* устанавливается в то же значение, что и имя функции.

#### `PyObject* PyFunction_NewWithQualName(PyObject *code, PyObject *globals, PyObject *qualname)`

*Возвращаемое значение: новая ссылка.*

Как [`PyFunction_New()`](https://python-all.ru/3.8/c-api/function.html#c.PyFunction_New), но также позволяет задать атрибут `__qualname__` объекта функции. *qualname* должен быть объектом unicode или `NULL`; если `NULL`, атрибут `__qualname__` устанавливается в то же значение, что и его атрибут `__name__`.

Новое в версии 3.3.

#### `PyObject* PyFunction_GetCode(PyObject *op)`

*Возвращаемое значение: заимствованная ссылка.*

Возвращает объект кода, связанный с объектом функции *op*.

#### `PyObject* PyFunction_GetGlobals(PyObject *op)`

*Возвращаемое значение: заимствованная ссылка.*

Возвращает словарь глобальных переменных, связанный с объектом функции *op*.

#### `PyObject* PyFunction_GetModule(PyObject *op)`

*Возвращаемое значение: заимствованная ссылка.*

Возвращает атрибут *\_\_module\_\_* объекта-функции *op*. Обычно это строка с именем модуля, но может быть установлено в любой другой объект кодом Python.

#### `PyObject* PyFunction_GetDefaults(PyObject *op)`

*Возвращаемое значение: заимствованная ссылка.*

Возвращает значения аргументов по умолчанию объекта функции *op*. Это может быть кортеж аргументов или `NULL`.

#### `int PyFunction_SetDefaults(PyObject *op, PyObject *defaults)`

Устанавливает значения аргументов по умолчанию для объекта функции *op*. *defaults* должен быть `Py_None` или кортежем.

В случае ошибки возбуждает [`SystemError`](https://python-all.ru/3.8/library/exceptions.html#SystemError) и возвращает `-1`.

#### `PyObject* PyFunction_GetClosure(PyObject *op)`

*Возвращаемое значение: заимствованная ссылка.*

Возвращает замыкание, связанное с функцией *op*. Может быть `NULL` или кортежем объектов-ячеек.

#### `int PyFunction_SetClosure(PyObject *op, PyObject *closure)`

Устанавливает замыкание для функции *op*. *closure* должен быть `Py_None` или кортежем объектов-ячеек.

В случае ошибки возбуждает [`SystemError`](https://python-all.ru/3.8/library/exceptions.html#SystemError) и возвращает `-1`.

#### `PyObject *PyFunction_GetAnnotations(PyObject *op)`

*Возвращаемое значение: заимствованная ссылка.*

Возвращает аннотации функции *op*. Может быть изменяемым словарём или `NULL`.

#### `int PyFunction_SetAnnotations(PyObject *op, PyObject *annotations)`

Устанавливает аннотации для функции *op*. *annotations* должен быть словарём или `Py_None`.

В случае ошибки возбуждает [`SystemError`](https://python-all.ru/3.8/library/exceptions.html#SystemError) и возвращает `-1`.
