2009-06-13 5 views

Antwort

103

Nur Globals verwenden()

Globals() - Gibt ein Wörterbuch der aktuellen globalen Symbol Tabelle darstellt. Dies ist immer das Verzeichnis des aktuellen Moduls (innerhalb einer Funktion oder Methode, das ist das Modul wo es definiert ist, nicht das Modul , von dem es aufgerufen wird).

http://docs.python.org/library/functions.html#globals

+3

Gibt es eine Möglichkeit, die globabals() des aufrufenden Moduls anstelle des definierenden Moduls zuzugreifen? – dimo414

+5

Sie können versuchen, Aufrufer-Globals aus dem Traceback-Modul (http://docs.python.org/library/traceback.html) zu bekommen, aber das wird in dunkle magische Gebiete. Ich weiß nicht, was Sie tun wollen, aber Sie sollten vielleicht Ihr Design überdenken, wenn Sie das brauchen. –

10

Auch die eingebaute in inspect Modul überprüfen. Es kann sehr praktisch sein.

+1

Ein relevantes Anwendungsbeispiel wird erwartet. Die Verbindung könnte faulenzen und nichts wertvolles hinterlassen. – IAbstract

121

Wie bereits erwähnt, gibt globals Ihnen ein Wörterbuch im Gegensatz zu dir(), das Ihnen eine Liste der Namen gibt, die im Modul definiert sind. Die Art, wie ich dies normalerweise sehe, ist wie folgt:

import sys 
dir(sys.modules[__name__]) 
+1

Ich wollte einen Kommentar hinzufügen, dass dies nicht für das Modul "__main__" funktionieren würde (das ist, was das Modul am Terminal aufgerufen wird), denn das scheint nicht in sys.modules aufgelistet zu sein - aber es ist tatsächlich so Arbeit :) – markm

+0

Es scheint jedoch nicht von ipdb (Einfügen "ipdb; ipdb.set_trace()" in Ihre Datei einfügen). – gatoatigrado

+9

Ausgezeichnet! Dies erlaubte mir, den Docstring des aktuellen Moduls als Verwendungsnachricht zu verwenden - 'sys.modules [__ name __] .__ doc__'. – george

Verwandte Themen