我不明白这个单一的下划线意味着什么。这是一个神奇的变量吗?我无法在locals()和globals()中看到它。
>>> 'abc'
'abc'
>>> len(_)
3
>>>
答案 0 :(得分:49)
在标准Python REPL中,_
表示最后返回的值 - 在您调用len(_)
时,_
的值为'abc'
。
例如:
>>> 10
10
>>> _
10
>>> _ + 5
15
>>> _ + 5
20
这由sys.displayhook
处理,_
变量在builtins
命名空间中包含int
和sum
之类的内容,这就是为什么你不能在globals()
中找不到它。
请注意,Python 脚本中没有此类功能。在脚本中,_
没有特殊含义,也不会自动设置为前一个语句生成的值。
另外,如果你想像上面那样使用它,请注意在REPL中重新分配_
!
>>> _ = "underscore"
>>> 10
10
>>> _ + 5
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
_ + 5
TypeError: cannot concatenate 'str' and 'int' objects
这会创建一个全局变量,隐藏内置函数中的_
变量。要撤消赋值(并从全局变量中删除_
),您必须:
>>> del _
然后功能将恢复正常(builtins._
将再次可见)。
答案 1 :(得分:17)
为什么你看不到它?它位于__builtins__
>>> __builtins__._ is _
True
所以它既不是全球性的,也不是本地的。 1
这项任务在哪里发生? 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 2012编辑:我称之为“superglobal”,因为__builtin__
的成员在任何模块的任何地方都可用。
答案 2 :(得分:2)
通常,我们在Python中使用_来绑定ugettext函数。