Документация Python неофициальный перевод

Объекты кодаCode Objects

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

type PyCodeObject

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

PyTypeObject PyCode_Type

Это экземпляр PyTypeObject, представляющий объект кода Python.

int PyCode_Check(PyObject *co)

Возвращает true, если co является объектом кода. Эта функция всегда выполняется успешно.

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, PyObject *qualname, int firstlineno, PyObject *linetable, PyObject *exceptiontable)
Возвращаемое значение: новая ссылка.

Возвращает новый объект кода. Если нужен фиктивный объект кода для создания фрейма, используйте PyCode_NewEmpty(). Прямой вызов PyCode_New() привяжет к точной версии Python, поскольку определение байт-кода часто меняется. Многочисленные аргументы этой функции сложным образом взаимозависимы, поэтому незначительные изменения значений могут привести к некорректному выполнению или сбою виртуальной машины. Используйте эту функцию только с крайней осторожностью.

Изменено в версии 3.11: Добавлены параметры qualname и exceptiontable.

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, PyObject *qualname, int firstlineno, PyObject *linetable, PyObject *exceptiontable)
Возвращаемое значение: новая ссылка.

Аналогично PyCode_New(), но с дополнительным параметром “posonlyargcount” для позиционных аргументов. Те же предостережения, что и для PyCode_New, применимы к этой функции.

Новое в версии 3.8.

Изменено в версии 3.11: Добавлены параметры qualname и exceptiontable.

PyCodeObject *PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno)
Возвращаемое значение: новая ссылка.

Возвращает новый пустой объект кода с указанными именем файла, именем функции и номером первой строки. Полученный объект кода вызовет Exception при выполнении.

int PyCode_Addr2Line(PyCodeObject *co, int byte_offset)

Возвращает номер строки инструкции, которая начинается до или на byte_offset и заканчивается после него. Если нужен просто номер строки фрейма, используйте PyFrame_GetLineNumber().

Для эффективного перебора номеров строк в объекте кода используйте API, описанное в PEP 626.

int PyCode_Addr2Location(PyObject *co, int byte_offset, int *start_line, int *start_column, int *end_line, int *end_column)

Устанавливает переданные указатели int на номера строки и столбца исходного кода для инструкции по адресу byte_offset. Устанавливает значение 0, если информация для какого-либо элемента недоступна.

Возвращает 1 при успехе функции и 0 в противном случае.

Новое в версии 3.11.

PyObject *PyCode_GetCode(PyCodeObject *co)

Эквивалент кода Python getattr(co, 'co_code'). Возвращает сильную ссылку на PyBytesObject, представляющий байт-код в объекте кода. В случае ошибки возвращается NULL и возбуждается исключение.

Этот PyBytesObject может быть создан интерпретатором по требованию и не обязательно представляет байт-код, который действительно выполняется CPython. Основное назначение этой функции – отладчики и профилировщики.

Новое в версии 3.11.

PyObject *PyCode_GetVarnames(PyCodeObject *co)

Эквивалент кода Python getattr(co, 'co_varnames'). Возвращает новую ссылку на PyTupleObject, содержащий имена локальных переменных. В случае ошибки возвращается NULL и возбуждается исключение.

Новое в версии 3.11.

PyObject *PyCode_GetCellvars(PyCodeObject *co)

Эквивалент кода Python getattr(co, 'co_cellvars'). Возвращает новую ссылку на PyTupleObject, содержащий имена локальных переменных, на которые ссылаются вложенные функции. В случае ошибки возвращается NULL и возбуждается исключение.

Новое в версии 3.11.

PyObject *PyCode_GetFreevars(PyCodeObject *co)

Эквивалентно коду Python getattr(co, 'co_freevars'). Возвращает новую ссылку на PyTupleObject, содержащий имена свободных переменных. В случае ошибки возвращается NULL и возбуждается исключение.

Новое в версии 3.11.