globals()
kehrt die Symbole in dem aktuellen globalen Namensraum (scope des aktuellen Moduls + Einbauten) in einem dict
-Objekt mit (key, value)
-Paaren. key
ist eine Zeichenkette mit dem Namen des Symbols und value
der Wert des Symbols selbst (zB die Anzahl 1
, eine anderen dict
, eine Funktion, eine Klasse, etc.)
locals()
gibt die Symbole im aktuellen lokalen Namensraum (Umfang der Funktion). Dies ergibt das gleiche Ergebnis wie globals()
, wenn auf Modulebene aufgerufen wird.
dir()
(ohne Parameter) gibt eine Liste von Namen aus dem aktuellen lokalen Namespace zurück.
Wenn Sie die folgenden drei Befehle auf Modulebene laufen, haben sie die gleichen Werte:
>>> sorted(locals().keys())
['A', '__builtins__', '__doc__', '__name__', '__package__', 'a', 'loc']
>>> sorted(dir())
['A', '__builtins__', '__doc__', '__name__', '__package__', 'a', 'loc']
>>> sorted(globals().keys())
['A', '__builtins__', '__doc__', '__name__', '__package__', 'a', 'loc']
Wenn diese drei Anrufe sind eine Funktion locals().keys()
und dir()
die gleichen Werte haben, aber globals()
unterscheidet.
>>> def A():
... print(sorted(locals().keys()))
... print(sorted(dir()))
... print(sorted(globals().keys()))
>>> A()
[]
[]
['A', 'B', '__builtins__', '__doc__', '__name__', '__package__', 'a', 'loc']
können Sie den Unterschied im Einsatz sehen die Verwendung von globals()
und locals()
.
Aber was ist mit dir()?
Der Punkt von dir()
ist, dass es ein Objekt als Parameter akzeptiert. Es wird eine Liste der Attributnamen dieses Objekts zurückgegeben. Sie können es z.B. um ein Objekt zur Laufzeit zu inspizieren.
Wenn wir das obige Beispiel mit der Funktion A()
nehmen, könnten wir nennen:
>>> dir(A)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']
und erhalten Sie alle Attribute des Funktionsobjekt A
.
Es gibt einige weitere Details über dir()
an: Difference between dir(…) and vars(…).keys() in Python?
einige relevante Fragen: [ "Was ist der Unterschied zwischen Globals(), Einheimische() und vars()"] (http://stackoverflow.com/questions/7969949/whats-the-difference-zwischen-globals-localhosts-and-vars) und ["Gibt es einen Unterschied zwischen dir() und localhosts() in Python?"] (http://stackoverflow.com/questions/ 12918189/any-difference-zwischen-dir-und-lokal-in-python – soon