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

---

# Объекты-генераторы

Объекты-генераторы – это то, что Python использует для реализации итераторов генераторов. Обычно они создаются путём итерации по функции, которая возвращает значения, а не явным вызовом [`PyGen_New()`](https://python-all.ru/3.15/c-api/gen.html#c.PyGen_New) или [`PyGen_NewWithQualName()`](https://python-all.ru/3.15/c-api/gen.html#c.PyGen_NewWithQualName).

#### `type PyGenObject`

C-структура, используемая для объектов-генераторов.

#### `PyTypeObject PyGen_Type`

Объект типа, соответствующий объектам-генераторам.

#### `int PyGen_Check(PyObject *ob)`

Возвращает истину, если *ob* является объектом-генератором; *ob* не должен быть `NULL`. Эта функция всегда завершается успешно.

#### `int PyGen_CheckExact(PyObject *ob)`

Возвращает истину, если тип *ob* – [`PyGen_Type`](https://python-all.ru/3.15/c-api/gen.html#c.PyGen_Type); *ob* не должен быть `NULL`. Эта функция всегда завершается успешно.

#### `PyObject *PyGen_New(PyFrameObject *frame)`

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

Создаёт и возвращает новый объект-генератор на основе объекта *frame*. Ссылка на *frame* «[перехватывается](https://python-all.ru/3.15/glossary.html#term-steal)» этой функцией (даже при ошибке). Аргумент не должен быть `NULL`.

#### `PyObject *PyGen_NewWithQualName(PyFrameObject *frame, PyObject *name, PyObject *qualname)`

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

Создаёт и возвращает новый объект-генератор на основе объекта *frame*, с `__name__` и `__qualname__`, установленными в *name* и *qualname*. Ссылка на *frame* «[перехватывается](https://python-all.ru/3.15/glossary.html#term-steal)» этой функцией (даже при ошибке). Аргумент *frame* не должен быть `NULL`.

#### `PyCodeObject *PyGen_GetCode(PyGenObject *gen)`

Возвращает новую [сильную ссылку](https://python-all.ru/3.15/glossary.html#term-strong-reference) на объект кода, обёрнутый в *gen*. Эта функция всегда завершается успешно.

## Асинхронные объекты-генераторы

> **См. также**
>
> [**PEP 525**](https://python-all.ru/3.15/c-api/gen.html)

#### `PyTypeObject PyAsyncGen_Type`

Объект типа, соответствующий асинхронным объектам-генераторам. Доступен как [`types.AsyncGeneratorType`](https://python-all.ru/3.15/library/types.html#types.AsyncGeneratorType) на уровне Python.

Добавлено в версии 3.6.

#### `PyObject *PyAsyncGen_New(PyFrameObject *frame, PyObject *name, PyObject *qualname)`

Создаёт новый асинхронный генератор, оборачивающий *frame*, с `__name__` и `__qualname__`, установленными в *name* и *qualname*. *frame* «[перехватывается](https://python-all.ru/3.15/glossary.html#term-steal)» этой функцией (даже при ошибке) и не должен быть `NULL`.

В случае успеха эта функция возвращает [сильную ссылку](https://python-all.ru/3.15/glossary.html#term-strong-reference) на новый асинхронный генератор. В случае неудачи возвращает `NULL` с установленным исключением.

Добавлено в версии 3.6.

#### `int PyAsyncGen_CheckExact(PyObject *op)`

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

Добавлено в версии 3.6.

## Устаревший API

#### `PyAsyncGenASend_CheckExact(op)`

Это API было включено в C API Python по ошибке.

Оно приведено здесь исключительно для полноты; не используйте это API.

[Soft deprecated](https://python-all.ru/3.15/glossary.html#term-soft-deprecated) since version 3.14.
