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

---

# Объекты кода

Объекты кода – это низкоуровневая деталь реализации CPython. Каждый из них представляет блок исполняемого кода, который ещё не привязан к функции.

**`PyCodeObject`**

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

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

Это экземпляр [`PyTypeObject`](https://python-all.ru/3.4/c-api/type.html#c.PyTypeObject), представляющий тип [`code`](https://python-all.ru/3.4/library/code.html#module-code) в Python.

#### `int PyCode_Check(PyObject *co)`

Возвращает истину, если *co* – объект [`code`](https://python-all.ru/3.4/library/code.html#module-code).

#### `int PyCode_GetNumFree(PyCodeObject *co)`

Возвращает количество свободных переменных в *co*.

#### `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)`

Возвращает новый объект кода. Если нужен фиктивный объект кода для создания фрейма, используйте [`PyCode_NewEmpty()`](https://python-all.ru/3.4/c-api/code.html#c.PyCode_NewEmpty). Прямой вызов [`PyCode_New()`](https://python-all.ru/3.4/c-api/code.html#c.PyCode_New) может привязать к конкретной версии Python, поскольку определение байт-кода часто меняется.

#### `PyCodeObject* PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno)`

Возвращает новый пустой объект кода с указанными именем файла, именем функции и номером первой строки. Вызов [`exec()`](https://python-all.ru/3.4/library/functions.html#exec) или [`eval()`](https://python-all.ru/3.4/library/functions.html#eval) для полученного объекта кода недопустим.
