gen.md
1> **Источник:** https://python-all.ru/3.16/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.16/c-api/gen.html#c.PyGen_New) или [`PyGen_NewWithQualName()`](https://python-all.ru/3.16/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.16/c-api/gen.html#c.PyGen_Type); *ob* не должен быть `NULL`. Эта функция всегда завершается успешно.2627#### `PyObject *PyGen_New(PyFrameObject *frame)`2829*Возвращаемое значение: новая ссылка.*3031Создаёт и возвращает новый объект-генератор на основе объекта *frame*. Ссылка на *frame* «[перехватывается](https://python-all.ru/3.16/glossary.html#term-steal)» этой функцией (даже при ошибке). Аргумент не должен быть `NULL`.3233Устарело с версии 3.16, будет удалено в версии 3.18: Эта функция не использовалась начиная с 3.10. Также невозможно сконструировать подходящий объект *frame* для вызова этой функции.3435#### `PyObject *PyGen_NewWithQualName(PyFrameObject *frame, PyObject *name, PyObject *qualname)`3637*Возвращаемое значение: новая ссылка.*3839Создаёт и возвращает новый объект-генератор на основе объекта *frame*, с `__name__` и `__qualname__`, установленными в *name* и *qualname*. Ссылка на *frame* «[перехватывается](https://python-all.ru/3.16/glossary.html#term-steal)» этой функцией (даже при ошибке). Аргумент *frame* не должен быть `NULL`.4041Устарело с версии 3.16, будет удалено в версии 3.18: Эта функция не использовалась начиная с 3.10. Также невозможно сконструировать подходящий объект *frame* для вызова этой функции.4243#### `PyCodeObject *PyGen_GetCode(PyGenObject *gen)`4445Возвращает новую [сильную ссылку](https://python-all.ru/3.16/glossary.html#term-strong-reference) на объект кода, обёрнутый в *gen*. Эта функция всегда завершается успешно.4647## Асинхронные объекты-генераторы4849> **См. также**50>51> [**PEP 525**](https://python-all.ru/3.16/c-api/gen.html)5253#### `PyTypeObject PyAsyncGen_Type`5455Объект типа, соответствующий асинхронным объектам-генераторам. Доступен как [`types.AsyncGeneratorType`](https://python-all.ru/3.16/library/types.html#types.AsyncGeneratorType) на уровне Python.5657Добавлено в версии 3.6.5859#### `PyObject *PyAsyncGen_New(PyFrameObject *frame, PyObject *name, PyObject *qualname)`6061Создаёт новый асинхронный генератор, оборачивающий *frame*, с `__name__` и `__qualname__`, установленными в *name* и *qualname*. *frame* «[перехватывается](https://python-all.ru/3.16/glossary.html#term-steal)» этой функцией (даже при ошибке) и не должен быть `NULL`.6263В случае успеха эта функция возвращает [сильную ссылку](https://python-all.ru/3.16/glossary.html#term-strong-reference) на новый асинхронный генератор. В случае неудачи возвращает `NULL` с установленным исключением.6465Добавлено в версии 3.6.6667Устарело с версии 3.16, будет удалено в версии 3.18: Эта функция не использовалась начиная с 3.10. Также невозможно сконструировать подходящий объект *frame* для вызова этой функции.6869#### `int PyAsyncGen_CheckExact(PyObject *op)`7071Возвращает истину, если *op* является асинхронным объектом-генератором, иначе ложь. Эта функция всегда завершается успешно.7273Добавлено в версии 3.6.7475## Устаревший API7677#### `PyAsyncGenASend_CheckExact(op)`7879Это API было включено в C API Python по ошибке.8081Оно приведено здесь исключительно для полноты; не используйте это API.8283[Soft deprecated](https://python-all.ru/3.16/glossary.html#term-soft-deprecated) since version 3.14.84