gen.md
1> **Источник:** https://python-all.ru/3.14/c-api/gen.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Объекты-генераторы89Объекты-генераторы – это то, что Python использует для реализации итераторов генераторов. Обычно они создаются путём итерации по функции, которая возвращает значения, а не явным вызовом [`PyGen_New()`](https://python-all.ru/3.14/c-api/gen.html#c.PyGen_New) или [`PyGen_NewWithQualName()`](https://python-all.ru/3.14/c-api/gen.html#c.PyGen_NewWithQualName).1011#### `type PyGenObject`1213C-структура, используемая для объектов-генераторов.1415#### `PyTypeObject PyGen_Type`1617Объект типа, соответствующий объектам-генераторам.1819#### `int PyGen_Check(PyObject *ob)`2021Возвращает истину, если *ob* является объектом-генератором; *ob* не должен быть `NULL`. Эта функция всегда завершается успешно.2223#### `int PyGen_CheckExact(PyObject *ob)`2425Возвращает истину, если тип *ob* – [`PyGen_Type`](https://python-all.ru/3.14/c-api/gen.html#c.PyGen_Type); *ob* не должен быть `NULL`. Эта функция всегда завершается успешно.2627#### `PyObject *PyGen_New(PyFrameObject *frame)`2829*Возвращаемое значение: новая ссылка.*3031Создаёт и возвращает новый объект-генератор на основе объекта *frame*. Ссылка на *frame* «[перехватывается](https://python-all.ru/3.14/glossary.html#term-steal)» этой функцией (даже при ошибке). Аргумент не должен быть `NULL`.3233#### `PyObject *PyGen_NewWithQualName(PyFrameObject *frame, PyObject *name, PyObject *qualname)`3435*Возвращаемое значение: новая ссылка.*3637Создаёт и возвращает новый объект-генератор на основе объекта *frame*, с `__name__` и `__qualname__`, установленными в *name* и *qualname*. Ссылка на *frame* «[перехватывается](https://python-all.ru/3.14/glossary.html#term-steal)» этой функцией (даже при ошибке). Аргумент *frame* не должен быть `NULL`.3839#### `PyCodeObject *PyGen_GetCode(PyGenObject *gen)`4041Возвращает новую [сильную ссылку](https://python-all.ru/3.14/glossary.html#term-strong-reference) на объект кода, обёрнутый в *gen*. Эта функция всегда завершается успешно.4243## Асинхронные объекты-генераторы4445> **См. также**46>47> [**PEP 525**](https://python-all.ru/3.14/c-api/gen.html)4849#### `PyTypeObject PyAsyncGen_Type`5051Объект типа, соответствующий асинхронным объектам-генераторам. Доступен как [`types.AsyncGeneratorType`](https://python-all.ru/3.14/library/types.html#types.AsyncGeneratorType) на уровне Python.5253Добавлено в версии 3.6.5455#### `PyObject *PyAsyncGen_New(PyFrameObject *frame, PyObject *name, PyObject *qualname)`5657Создаёт новый асинхронный генератор, оборачивающий *frame*, с `__name__` и `__qualname__`, установленными в *name* и *qualname*. *frame* «[перехватывается](https://python-all.ru/3.14/glossary.html#term-steal)» этой функцией (даже при ошибке) и не должен быть `NULL`.5859В случае успеха эта функция возвращает [сильную ссылку](https://python-all.ru/3.14/glossary.html#term-strong-reference) на новый асинхронный генератор. В случае неудачи возвращает `NULL` с установленным исключением.6061Добавлено в версии 3.6.6263#### `int PyAsyncGen_CheckExact(PyObject *op)`6465Возвращает истину, если *op* является асинхронным объектом-генератором, иначе ложь. Эта функция всегда завершается успешно.6667Добавлено в версии 3.6.6869## Устаревший API7071#### `PyAsyncGenASend_CheckExact(op)`7273Это API было включено в C API Python по ошибке.7475Оно приведено здесь исключительно для полноты; не используйте это API.7677[Soft deprecated](https://python-all.ru/3.14/glossary.html#term-soft-deprecated) since version 3.14.78