code.md · Markdown – Документация Python
Документация Python неофициальный перевод

code.md

52 строк · 4.4 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.10/c-api/code.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Объекты кода89Объекты кода – это низкоуровневая деталь реализации CPython. Каждый из них представляет блок исполняемого кода, который ещё не привязан к функции.1011#### `type PyCodeObject`1213C-структура объектов, используемых для описания объектов кода. Поля этого типа могут быть изменены в любое время.1415#### `PyTypeObject PyCode_Type`1617Это экземпляр [`PyTypeObject`](https://python-all.ru/3.10/c-api/type.html#c.PyTypeObject), представляющий тип [`code`](https://python-all.ru/3.10/library/code.html#module-code) Python.1819#### `int PyCode_Check(PyObject *co)`2021Возвращает истину, если *co* является объектом [`code`](https://python-all.ru/3.10/library/code.html#module-code). Эта функция всегда завершается успешно.2223#### `int PyCode_GetNumFree(PyCodeObject *co)`2425Возвращает количество свободных переменных в *co*.2627#### `PyCodeObject *PyCode_New(int argcount, int kwonlyargcount, int nlocals, int stacksize, int flags, PyObject *code, PyObject *consts, PyObject *names, PyObject *varnames, PyObject *freevars, PyObject *cellvars, PyObject *filename, PyObject *name, int firstlineno, PyObject *lnotab)`2829*Возвращаемое значение: новая ссылка.*3031Возвращает новый объект кода. Если нужен фиктивный объект кода для создания фрейма, используйте [`PyCode_NewEmpty()`](https://python-all.ru/3.10/c-api/code.html#c.PyCode_NewEmpty). Вызов [`PyCode_New()`](https://python-all.ru/3.10/c-api/code.html#c.PyCode_New) напрямую может привязать к конкретной версии Python, поскольку определение байт-кода часто меняется.3233#### `PyCodeObject *PyCode_NewWithPosOnlyArgs(int argcount, int posonlyargcount, int kwonlyargcount, int nlocals, int stacksize, int flags, PyObject *code, PyObject *consts, PyObject *names, PyObject *varnames, PyObject *freevars, PyObject *cellvars, PyObject *filename, PyObject *name, int firstlineno, PyObject *lnotab)`3435*Возвращаемое значение: новая ссылка.*3637Аналогично [`PyCode_New()`](https://python-all.ru/3.10/c-api/code.html#c.PyCode_New), но с дополнительным параметром «posonlyargcount» для позиционных аргументов.3839Новое в версии 3.8.4041#### `PyCodeObject *PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno)`4243*Возвращаемое значение: новая ссылка.*4445Возвращает новый пустой объект кода с указанными именем файла, именем функции и номером первой строки. Недопустимо [`exec()`](https://python-all.ru/3.10/library/functions.html#exec) или [`eval()`](https://python-all.ru/3.10/library/functions.html#eval) результирующий объект кода.4647#### `int PyCode_Addr2Line(PyCodeObject *co, int byte_offset)`4849Возвращает номер строки инструкции, которая начинается до или на `byte_offset` и заканчивается после него. Если нужен просто номер строки фрейма, используйте [`PyFrame_GetLineNumber()`](https://python-all.ru/3.10/c-api/reflection.html#c.PyFrame_GetLineNumber).5051Для эффективного перебора номеров строк в объекте кода используйте [API, описанное в PEP 626](https://python-all.ru/3.10/c-api/code.html).52