non capisco che cosa significa questa singola sottolineatura. È una variabile magica? Non riesco a vederlo in locals() e globals().La singola sottolineatura "_" è una variabile incorporata in Python?
>>> 'abc'
'abc'
>>> len(_)
3
>>>
non capisco che cosa significa questa singola sottolineatura. È una variabile magica? Non riesco a vederlo in locals() e globals().La singola sottolineatura "_" è una variabile incorporata in Python?
>>> 'abc'
'abc'
>>> len(_)
3
>>>
Nel Python REPL standard _
rappresenta l'ultimo valore restituito - nel punto in cui hai chiamato len(_)
, _
era il valore 'abc'
.
Ad esempio:
>>> 10
10
>>> _
10
>>> _ + 5
15
>>> _ + 5
20
Questa è gestita da sys.displayhook
, e la variabile _
va in builtins
spazio dei nomi con le cose come int
e sum
, motivo per cui non si poteva trovare in globals()
.
Si noti che non esiste tale funzionalità all'interno degli script Python. In uno script, _
non ha alcun significato speciale e non verrà impostato automaticamente sul valore prodotto dall'istruzione precedente.
Inoltre, fate attenzione di riassegnazione _
nel REPL se si desidera utilizzarlo come sopra!
>>> _ = "underscore"
>>> 10
10
>>> _ + 5
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
_ + 5
TypeError: cannot concatenate 'str' and 'int' objects
Questo crea una variabile globale che nasconde la variabile _
nel built-in. Per annullare l'assegnazione (e rimuovere la _
da globali), dovrete:
>>> del _
quindi la funzionalità sarà di nuovo al normale (la builtins._
sarà di nuovo visibile).
Perché non si può vedere? E 'in __builtins__
>>> __builtins__._ is _
True
Quindi non è né globale né locale.
E dove si svolge questo incarico? sys.displayhook
:
>>> import sys
>>> help(sys.displayhook)
Help on built-in function displayhook in module sys:
displayhook(...)
displayhook(object) -> None
Print an object to sys.stdout and also save it in __builtin__.
2012 Edit: Lo definirei "superglobali" dal __builtin__
s' membri sono disponibili ovunque, in qualsiasi modulo.
Perché qualcosa è utilizzabile solo in REPL ma non negli script inseriti in __builtin__? – user937284
Di solito, stiamo usando _ in Python per legare una funzione ugettext.
anche questo è vero, ma solo per le applicazioni Python. 'gettext.install' si legherà a' __builtins __._ ', in modo che sia disponibile senza importare in tutte le applicazioni; quindi lo stesso tipo di nome "magico". – u0b34a0f6ae
FYI: REPL è l'abbreviazione di Read-Eval-Print Loop. Come sempre, wikipedia ha più informazioni se lo vuoi. http://en.wikipedia.org/wiki/Read-eval-print_loop –
Che cosa è un "run-of-the-mill identificatore"? La ricerca rapida ha dato come risultato "semplicemente media, comune, mediocre" - cosa significa "_" negli script Python? – user937284
@ectomorph aggiornato per chiarire. –