globals()
rendimenti dei simboli nella corrente namespace globale (portata del modulo corrente + built-in) in un oggetto dict
con (key, value)
-pairs. key
è una stringa con il nome del simbolo e value
è il valore del simbolo stesso (ad esempio, il numero 1
, un altro dict
, una funzione, una classe, ecc)
locals()
restituisce i simboli nella corrente namespace locale (ambito della funzione). Questo darà lo stesso risultato di globals()
quando viene chiamato a livello di modulo.
dir()
(senza parametri) restituisce un elenco di nomi dallo spazio dei nomi locale corrente.
Quando si eseguono i seguenti tre comandi sul livello di modulo, che hanno gli stessi valori:
>>> 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']
Se queste tre chiamate sono effettuate una funzione locals().keys()
e dir()
hanno gli stessi valori ma globals()
differisce.
>>> def A():
... print(sorted(locals().keys()))
... print(sorted(dir()))
... print(sorted(globals().keys()))
>>> A()
[]
[]
['A', 'B', '__builtins__', '__doc__', '__name__', '__package__', 'a', 'loc']
Si può vedere la differenza in uso l'uso di globals()
e locals()
.
Ma che dire di dir()?
Il punto di dir()
è che accetta un oggetto come parametro. Restituirà una lista di nomi di attributi di quell'oggetto. Puoi usarlo, ad es. per ispezionare un oggetto in fase di esecuzione.
Se prendiamo l'esempio di cui sopra con la funzione A()
, che potremmo chiamare:
>>> 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']
e ottenere tutti gli attributi dell'oggetto funzione di A
.
Ci sono alcuni ulteriori dettagli sul dir()
a: Difference between dir(…) and vars(…).keys() in Python?
alcune domande relative: [ "Qual è la differenza tra globali(), locali(), e VAR()"] (http://stackoverflow.com/questions/7969949/whats-the-difference-between-globals-locals-and-vars) e ["Qualche differenza tra dir() e locals() in Python?"] (http://stackoverflow.com/questions/ 12918189/any-differenza-tra-dir-e-locali-a-python) – soon