2009-06-13 10 views

risposta

103

Basta usare variabili globali()

globali() - Restituisce un dizionario che rappresenta il simbolo globale corrente tavolo. Questo è sempre il dizionario del modulo corrente (all'interno di una funzione o metodo , questo è il modulo dove è definito, non il modulo da cui è chiamato).

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

+3

C'è un modo per accedere al gloabals() del modulo di chiamata, invece del modulo di definizione? – dimo414

+5

Puoi provare ad ottenere le globali del chiamante dal modulo di traceback (http://docs.python.org/library/traceback.html), ma questo sta entrando nel territorio della magia oscura. Non so cosa stai cercando di fare, ma potresti voler ripensare il tuo design se ne hai bisogno. –

10

controlla anche il modulo integrato inspect. Può essere molto utile.

+1

È previsto un esempio di utilizzo pertinente. Il link potrebbe marcire senza lasciare nulla di valore qui. – IAbstract

121

Come accennato in precedenza, globals fornisce un dizionario invece di dir() che fornisce un elenco dei nomi definiti nel modulo. Il modo in cui in genere vedo questo fatto è il seguente:

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

Stavo per aggiungere un commento che questo non avrebbe funzionato per il modulo '__main__' (che è ciò che viene chiamato il modulo sul terminale) perché non sembra essere elencato in sys.modules - ma in effetti lo fa lavoro :) – markm

+0

Tuttavia, non sembra funzionare da ipdb (inserire "import ipdb; ipdb.set_trace()" nel file). – gatoatigrado

+9

Eccellente! Questo mi ha permesso di usare la docstring del modulo corrente come un messaggio di utilizzo - 'sys.modules [__ nome __] .__ doc__'. – george

Problemi correlati