Pergunta

Encontrei objetos de código em Python.Eu estou curioso para saber o que cada uma das variáveis no construtores de fazer.Não há muita informação sobre eles no grupo builtin função de ajuda tudo que eu consegui foi:

 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.

Que obviamente não é muito informativo.Quais são os tipos de cada um destes insumos esperar, e o que fazem os valores? NOTA: Eu fiz essa pergunta fora do acadêmico curiosidade, e não por qualquer específicos de codificação finalidade.

Foi útil?

Solução

Um Python de código objeto é mais apenas um recipiente para seus atributos.Cada um dos argumentos para o construtor torna-se um atributo com um co_ prefixo (por exemplo,o argcount argumento torna-se o co_argcount atributo).

O construtor faz um pouco de validação, então, se os argumentos não são do tipo certo, ele irá gerar uma exceção de imediato (ao invés de incluir somente a falhar quando o código objeto é usada mais tarde).

Como para que os argumentos e atributos de dizer, que é principalmente documentado em uma grande mesa de a documentação para a inspect módulo.Aqui está a 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

Os atributos co_freevars e co_cellvars não são documentados, tanto quanto eu posso ver.Eles estão relacionados ao fechamento, eu acho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top