Domanda

Ho trovato oggetti di codice in Python.Sono curioso di sapere cosa fanno ciascuna delle variabili nei costruttori.Non ci sono molte informazioni su di loro nella funzione di aiuto incorporato tutto quello che ho ricevuto è stato:

 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.
.

che ovviamente non è molto informativo.Quali tipi si aspettano ciascuno di questi ingressi e cosa fanno i valori? Nota: Ho posto questa domanda dalla curiosità accademica, e non per uno scopo di codifica specifico.

È stato utile?

Soluzione

Un oggetto Code Python è per lo più solo un contenitore per i suoi attributi.Ciascuno degli argomenti che vedi per il costruttore diventa un attributo con un prefisso co_ (ad esempio l'argomento argcount diventa l'attributo co_argcount).

Il costruttore esegue un po 'di convalida, quindi se gli argomenti non sono del tipo giusto, allineerà subito un'eccezione (anziché solo fallire quando l'oggetto Codice viene utilizzato in seguito).

Per quanto riguarda ciò che gli argomenti e gli attributi significano, questo è per lo più documentato in un grande tavolo in La documentazione per il modulo inspect .Ecco la parte rilevante:

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
.

Gli attributi co_freevars e co_cellvars non sono documentati per quanto posso vedere.Sono legati alle chiusure, penso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top