¿Es el guión bajo “_” una variable incorporada en Python?

No entiendo lo que significa este guión bajo. ¿Es una variable mágica? No puedo verlo en locals () y globals ().

>>> 'abc' 'abc' >>> len(_) 3 >>> 

Related of "¿Es el guión bajo “_” una variable incorporada en Python?"

En el estándar de Python REPL, _ representa el último valor devuelto, en el punto donde llamó a 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 builtins con cosas como int y sum , por lo que no pudo encontrarlo en globals() .

Tenga en cuenta que no existe tal funcionalidad dentro de los scripts de Python. En una secuencia de comandos, _ no tiene un significado especial y no se ajustará automáticamente al valor producido por la statement anterior.

Además, tenga cuidado de reasignar _ en el REPL si quiere usarlo como arriba.

 >>> _ = "underscore" >>> 10 10 >>> _ + 5 Traceback (most recent call last): File "", line 1, in  _ + 5 TypeError: cannot concatenate 'str' and 'int' objects 

Esto crea una variable global que oculta la variable _ en las incorporaciones. Para deshacer la asignación (y eliminar el _ de los globales), tendrás que:

 >>> del _ 

entonces la funcionalidad volverá a la normalidad (los builtins._ serán visibles nuevamente).

¿Por qué no puedes verlo? Está en __builtins__

 >>> __builtins__._ is _ True 

Así que no es ni global ni local. 1

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

1 Edición 2012: lo llamaría “superglobal” ya que los miembros de __builtin__ están disponibles en cualquier parte, en cualquier módulo.

Por lo general, estamos usando _ en Python para enlazar una función ugettext.