Nota

¡Ayúdanos a traducir la documentación oficial de Python al Español! Puedes encontrar más información en Como contribuir. Ayuda a acercar Python a más personas de habla hispana.

Objetos Código

Los objetos código son un detalle de bajo nivel de la implementación de CPython. Cada uno representa un fragmento de código ejecutable que aún no se ha vinculado a una función.

type PyCodeObject

La estructura en C de los objetos utilizados para describir objetos código. Los campos de este tipo están sujetos a cambios en cualquier momento.

PyTypeObject PyCode_Type

Esta es una instancia de PyTypeObject que representa el tipo Python code.

int PyCode_Check(PyObject *co)

Retorna verdadero si co es un objeto code. Esta función siempre finaliza con éxito.

int PyCode_GetNumFree(PyCodeObject *co)

Retorna el número de variables libres en 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, int firstlineno, PyObject *linetable, PyObject *exceptiontable)
Return value: New reference.

Retorna un nuevo objeto de código. Si se necesita un objeto de código ficticio para crear un marco (frame), usar PyCode_NewEmpty() en su lugar. Llamando PyCode_New() directamente puede enlazarlo a una versión precisa de Python ya que la definición del código de bytes cambia a menudo. Muchos de los argumentos de esta función están relacionados mutuamente de formas complejas, lo cual significa que cambios sutiles en estos valores probablemente resulten en ejecuciones incorrectas o fallas en la VM.

Distinto en la versión 3.11: Se agregó el parámetro 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, int firstlineno, PyObject *linetable, PyObject *exceptiontable)
Return value: New reference.

Similar a PyCode_New(), pero con un «posonlyargcount» adicional para argumentos solo posicionales. Las mismas advertencias que aplican a PyCode_New también aplican a esta función.

Nuevo en la versión 3.8.

Distinto en la versión 3.11: Se agregó el parámetro exceptiontable.

PyCodeObject *PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno)
Return value: New reference.

Retorna un nuevo objeto de código vacío con el nombre de archivo especificado, el nombre de la función y el número de la primera línea. Si el objeto código resultante es ejecutado, lanzará una Exception.

int PyCode_Addr2Line(PyCodeObject *co, int byte_offset)

Retorna el número de línea de la instrucción que se produce en o antes de byte_offset y finaliza después. Si solo necesita el número de línea de un marco, use PyFrame_GetLineNumber() en su lugar.

Para iterar de manera eficiente sobre los números de línea en un objeto de código, use la API descrita en PEP 626.

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

Establece los punteros int pasados en los números de línea y columna del código fuente para las instrucciones en byte_offset. Establece el valor en 0 cuando la información no está disponible para algún elemento en particular.

Retorna 1 si la función fue exitosa y 0 de lo contrario.

PyObject *PyCode_GetCode(PyCodeObject *co)

Equivalente al código Python getattr(co, 'co_code'). Retorna una referencia fuerte a un PyBytesObject representando el bytecode en un objecto código. En caso de error se retorna NULL y se lanza una excepción.

Este PyBytesObject puede ser creado a pedido del intérprete y no necesariamente representa el bytecode que es realmente ejecutado por CPython. Los casos de uso principales para esta función son depuradores y perfiladores.

Nuevo en la versión 3.11.

PyObject *PyCode_GetVarnames(PyCodeObject *co)

Equivalente al código Python getattr(co, 'co_varnames'). Retorna una nueva referencia a un PyTupleObject que contiene los nombres de las variables locales. En caso de error, retorna NULL y lanza una excepción.

Nuevo en la versión 3.11.

PyObject *PyCode_GetCellvars(PyCodeObject *co)

Equivalente al código Python getattr(co, 'co_cellvars'). Retorna una nueva referencia a un PyTupleObject que contiene los nombres de las variables locales referenciadas por funciones anidadas. En caso de error, retorna NULL y lanza una excepción.

Nuevo en la versión 3.11.

PyObject *PyCode_GetFreevars(PyCodeObject *co)

Equivalente al código Python getattr(co, 'co_freevars'). Retorna una nueva referencia a un PyTupleObject que contiene los nombres de las variables libres. En caso de error, retorna NULL y lanza una excepción.

Nuevo en la versión 3.11.