No entiendo qué significa este subrayado único. ¿Es una variable mágica? No puedo verlo en locals() y globals().¿El guión bajo "_" es una variable incorporada en Python?
>>> 'abc'
'abc'
>>> len(_)
3
>>>
No entiendo qué significa este subrayado único. ¿Es una variable mágica? No puedo verlo en locals() y globals().¿El guión bajo "_" es una variable incorporada en Python?
>>> 'abc'
'abc'
>>> len(_)
3
>>>
En el REPL estándar de Python, _
representa el último valor devuelto - en el punto en que llamó len(_)
, _
era el valor 'abc'
.
Por ejemplo:
>>> 10
10
>>> _
10
>>> _ + 5
15
>>> _ + 5
20
Esto es manejado por sys.displayhook
, y la variable _
va en el espacio de nombres con builtins
cosas como int
y sum
, por lo que no se podía encontrar en globals()
.
Tenga en cuenta que no existe tal funcionalidad dentro de las secuencias de comandos de Python . En un script, _
no tiene un significado especial y no se establecerá automáticamente en el valor producido por la declaración anterior.
Además, tenga cuidado de reasignar _
en el REPL si desea utilizarlo como se indicó anteriormente.
>>> _ = "underscore"
>>> 10
10
>>> _ + 5
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
_ + 5
TypeError: cannot concatenate 'str' and 'int' objects
Esto crea una variable global que esconde la variable _
en los muebles empotrados. Para deshacer la asignación (y eliminar la _
de variables globales), que tendrá que:
>>> del _
entonces la funcionalidad habrá vuelto a la normalidad (el builtins._
será visible de nuevo).
¿Por qué no puedes verlo? Es en __builtins__
>>> __builtins__._ is _
True
Así que es ni global ni local.
¿Y dónde ocurre esta tarea? 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 Editar: Yo lo llamaría "superglobales" desde __builtin__
's miembros están disponibles en todas partes, en cualquier módulo.
¿Por qué es algo que solo se puede usar en REPL pero no en scripts ubicados en __builtin__? – user937284
Normalmente, estamos usando _ en Python para enlazar una función ugettext.
esto también es cierto, pero solo para aplicaciones Python. 'gettext.install' se vinculará a' __builtins____, de modo que esté disponible sin importar en toda la aplicación; por lo tanto, el mismo tipo de nombre "mágico". – u0b34a0f6ae
FYI: REPL es la abreviatura de Read-Eval-Print Loop. Como siempre, wikipedia tiene más información si la quieres. http://en.wikipedia.org/wiki/Read-eval-print_loop –
¿Qué es un "identificador run-of-the-mill"? La búsqueda rápida resultó en "meramente promedio, vulgar, mediocre", ¿qué significa esto con respecto a "_" en las secuencias de comandos de Python? – user937284
@ectomorph actualizado para aclarar. –