Объекты кода¶
Объекты кода - это низкоуровневая деталь реализации 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')
. Возвращает строгую ссылку на aPyBytesObject
, представляющую байт-код в объекте code. В случае ошибки возвращаетсяNULL
и генерируется исключение.Этот
PyBytesObject
может быть создан интерпретатором по требованию и не обязательно представляет байт-код, фактически выполняемый CPython. Основным вариантом использования этой функции являются отладчики и профилировщики.Добавлено в версии 3.11.
-
PyObject *PyCode_GetVarnames(PyCodeObject *co)¶
Эквивалентно коду на Python
getattr(co, 'co_varnames')
. Возвращает новую ссылку на aPyTupleObject
, содержащую имена локальных переменных. В случае ошибки возвращаетсяNULL
и генерируется исключение.Добавлено в версии 3.11.
-
PyObject *PyCode_GetCellvars(PyCodeObject *co)¶
Эквивалентно коду на Python
getattr(co, 'co_cellvars')
. Возвращает новую ссылку на aPyTupleObject
, содержащую имена локальных переменных, на которые ссылаются вложенные функции. В случае ошибки возвращаетсяNULL
и генерируется исключение.Добавлено в версии 3.11.
-
PyObject *PyCode_GetFreevars(PyCodeObject *co)¶
Эквивалентно коду на Python
getattr(co, 'co_freevars')
. Возвращает новую ссылку на aPyTupleObject
, содержащую имена свободных переменных. В случае ошибки возвращаетсяNULL
и генерируется исключение.Добавлено в версии 3.11.