Frage

Ich habe Codeobjekte in Python gefunden.Ich bin neugierig, was die einzelnen Variablen in den Konstruktoren bewirken.In der integrierten Hilfefunktion gibt es nicht viele Informationen dazu. Ich habe nur Folgendes erhalten:

 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.

Das ist offensichtlich nicht sehr aufschlussreich.Welche Typen erwarten die einzelnen Eingaben und was bewirken die Werte? NOTIZ: Ich habe diese Frage aus akademischer Neugier gestellt und nicht für einen bestimmten Codierungszweck.

War es hilfreich?

Lösung

Ein Python-Codeobjekt ist meist nur ein Container für seine Attribute.Jedes der Argumente, die Sie für den Konstruktor sehen, wird zu einem Attribut mit a co_ Präfix (z.B.Die argcount Argument wird zum co_argcount Attribut).

Der Konstruktor führt eine gewisse Validierung durch. Wenn also die Argumente nicht vom richtigen Typ sind, wird sofort eine Ausnahme ausgelöst (anstatt erst dann fehlzuschlagen, wenn das Codeobjekt später verwendet wird).

Was die Argumente und Attribute bedeuten, ist meist in einer großen Tabelle dokumentiert die Dokumentation für die inspect Modul.Hier ist der relevante Teil:

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

Die Attribute co_freevars Und co_cellvars sind meines Erachtens nicht dokumentiert.Ich glaube, sie hängen mit Schließungen zusammen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top