Wie können wir die Symbol-Tabelle eines Python-Quellcodes sehen?
Ich meine, Python erstellt für jedes Programm eine Symboltabelle, bevor es tatsächlich ausgeführt wird. Also lautet meine Frage, wie ich diese Symboltabelle als Ausgabe bekommen kann.
Wenn Sie nach der Symboltabelle fragen, die beim Generieren von Bytecode verwendet wird, sehen Sie sich die symtable
Modul. Auch diese beiden Artikel von Eli Bendersky sind faszinierend und sehr detailliert:
Python-Interna: Symboltabellen, Teil 1
Python-Interna: Symboltabellen, Teil 2
In Teil 2 erklärt er eine Funktion, die eine Beschreibung eines symtable ausdrucken kann, aber es scheint für Python 3 geschrieben worden zu sein. Hier ist eine Version für Python 2.x:
%Vor%Python ist eher dynamisch als statisch. Statt einer Symboltabelle wie im kompilierten Objektcode hat die virtuelle Maschine einen adressierbaren Namensraum für Ihre Variablen.
Die Funktion dir()
oder dir(module)
gibt den effektiven Namespace an diesem Punkt im Code zurück. Es wird hauptsächlich im interaktiven Interpreter verwendet, kann aber auch per Code verwendet werden. Es gibt eine Liste von Strings zurück, von denen jeder eine Variable mit einem gewissen Wert ist.
Die Funktion globals()
gibt ein Wörterbuch mit Variablennamen an Variablenwerte zurück, wobei die Variablennamen in diesem Moment als global betrachtet werden.
Die Funktion locals()
gibt ein Wörterbuch mit Variablennamen an Variablenwerte zurück, wobei die Variablennamen in diesem Moment als lokal betrachtet werden.
Python erstellt keine Symboltabelle, bevor das Programm ausgeführt wird. Tatsächlich können Typen und Funktionen während der Ausführung definiert werden (und sind normalerweise).
Vielleicht interessiert es Sie, Warum Python-Code zu kompilieren?
Siehe auch die detaillierte Antwort von @wberry
Sie werden wahrscheinlich Eli Benderskys Artikel zum Thema hier genießen
In CPython steht Ihnen das Modul symtable
zur Verfügung.
In Teil 2 beschreibt Eli eine Methode Das führt die Symboltabelle, die unglaublich hilfreich ist:
%Vor%Tags und Links python symbol-table