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 Pythoncode
.
-
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. LlamandoPyCode_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 aPyCode_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, usePyFrame_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 enbyte_offset
. Establece el valor en0
cuando la información no está disponible para algún elemento en particular.Retorna
1
si la función fue exitosa y0
de lo contrario.
-
PyObject *PyCode_GetCode(PyCodeObject *co)¶
Equivalente al código Python
getattr(co, 'co_code')
. Retorna una referencia fuerte a unPyBytesObject
representando el bytecode en un objecto código. En caso de error se retornaNULL
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 unPyTupleObject
que contiene los nombres de las variables locales. En caso de error, retornaNULL
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 unPyTupleObject
que contiene los nombres de las variables locales referenciadas por funciones anidadas. En caso de error, retornaNULL
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 unPyTupleObject
que contiene los nombres de las variables libres. En caso de error, retornaNULL
y lanza una excepción.Nuevo en la versión 3.11.