2009-06-13 15 views

Odpowiedz

103

Wystarczy użyć globalnych()

globalnych() - Zwraca słownik reprezentującego obecny globalny symbol tabeli. Jest to zawsze słownik bieżącego modułu (wewnątrz funkcji lub metody , jest to moduł , gdzie jest zdefiniowany, a nie moduł , z którego jest wywoływany).

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

+3

Czy istnieje jakiś sposób dostępu do gloabals() modułu wywołującego, zamiast definiowania modułu? – dimo414

+5

Możesz spróbować uzyskać globalne wywołania z modułu traceback (http://docs.python.org/library/traceback.html), ale to wchodzi w obszar czarnej magii. Nie wiem, co próbujesz zrobić, ale możesz chcieć przemyśleć swój projekt, jeśli tego potrzebujesz. –

10

Sprawdź również wbudowany moduł inspect. Może być bardzo przydatny.

+1

Odpowiedni przykład użycia jest oczekiwany. Link może gnić, nie pozostawiając nic wartościowego. – IAbstract

121

Jak wcześniej wspomniano, globals daje słownik, a nie dir(), który daje listę nazw zdefiniowanych w module. Sposób, w jaki zwykle to widzę, jest taki:

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

Zamierzałem dodać komentarz, który nie działałby dla modułu "__main__" (który jest tym, co moduł uruchamia w terminalu), ponieważ nie wydaje się być wymieniony w sys.modules - ale rzeczywiście praca :) – markm

+0

Jednak nie wydaje się działać z ipdb (wstaw "import ipdb; ipdb.set_trace()" do twojego pliku). – gatoatigrado

+9

Doskonały! Pozwoliło mi to na użycie modułu bieżącego modułu jako komunikatu o użyciu - 'sys.modules [__ name __] .__ doc__'. – george

Powiązane problemy