Spec-Zone.ru › Python 3.11

Объекты кода

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

type PyCodeObject

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

PyTypeObject PyCode_Type

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

int PyCode_Check(PyObject *co)

Возвращает истину, если co является объектом 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, 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.

© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/c-api/code.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API