Standard __init__ für Codeobjekte
-
02-01-2020 - |
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.
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.