Объекты кода¶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.