Pregunta

Encontré objetos de código en Python.Tengo curiosidad por saber qué hace cada una de las variables de los constructores.No hay mucha información sobre ellos en la función de ayuda incorporada, todo lo que obtuve fue:

 class code(object)
 |  code(argcount, nlocals, stacksize, flags, codestring, constants, names,
 |        varnames, filename, name, firstlineno, lnotab[, freevars[, cellvars]])
 |  
 |  Create a code object.  Not for the faint of heart.

Obviamente esto no es muy informativo.¿Qué tipos espera cada una de estas entradas y qué hacen los valores? NOTA: Hice esta pregunta por curiosidad académica y no con ningún propósito de codificación específico.

¿Fue útil?

Solución

Un objeto de código Python es principalmente un contenedor para sus atributos.Cada uno de los argumentos que ve para el constructor se convierte en un atributo con un co_ prefijo (por ej.el argcount El argumento se convierte en co_argcount atributo).

El constructor realiza un poco de validación, por lo que si los argumentos no son del tipo correcto, generará una excepción de inmediato (en lugar de fallar solo cuando el objeto de código se use más adelante).

En cuanto a lo que significan los argumentos y atributos, está documentado principalmente en una tabla grande en la documentación para el inspect módulo.Aquí está la parte relevante:

code  co_argcount     number of arguments (not including * or ** args)   
      co_code         string of raw compiled bytecode    
      co_consts       tuple of constants used in the bytecode    
      co_filename     name of file in which this code object was created     
      co_firstlineno  number of first line in Python source code     
      co_flags        bitmap: 1=optimized | 2=newlocals | 4=*arg | 8=**arg   
      co_lnotab       encoded mapping of line numbers to bytecode indices    
      co_name         name with which this code object was defined   
      co_names        tuple of names of local variables      
      co_nlocals      number of local variables      
      co_stacksize    virtual machine stack space required   
      co_varnames     tuple of names of arguments and local variables

los atributos co_freevars y co_cellvars No están documentados hasta donde puedo ver.Creo que están relacionados con cierres.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top