2009-10-08 22 views

Respuesta

43

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).

+7

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 –

+0

¿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

+0

@ectomorph actualizado para aclarar. –

17

¿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.

+1

¿Por qué es algo que solo se puede usar en REPL pero no en scripts ubicados en __builtin__? – user937284

2

Normalmente, estamos usando _ en Python para enlazar una función ugettext.

+1

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

Cuestiones relacionadas