Объекты кода

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

type PyCodeObject

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

PyTypeObject PyCode_Type

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

int PyCode_Check(PyObject *co)

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

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(), но с дополнительным значением «posonly argcount» для позиционных аргументов. Те же предостережения, которые применимы к 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().

Для эффективного перебора номеров строк в объекте code используйте the API described in 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'). Возвращает строгую ссылку на a PyBytesObject, представляющую байт-код в объекте code. В случае ошибки возвращается NULL и генерируется исключение.

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

Добавлено в версии 3.11.

PyObject *PyCode_GetVarnames(PyCodeObject *co)

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

Добавлено в версии 3.11.

PyObject *PyCode_GetCellvars(PyCodeObject *co)

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

Добавлено в версии 3.11.

PyObject *PyCode_GetFreevars(PyCodeObject *co)

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

Добавлено в версии 3.11.

Вернуться на верх