单个下划线“_”是Python中的内置变量吗?

时间:2009-10-08 16:11:34

标签: python

我不明白这个单一的下划线意味着什么。这是一个神奇的变量吗?我无法在locals()和globals()中看到它。

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

3 个答案:

答案 0 :(得分:49)

在标准Python REPL中,_表示最后返回的值 - 在您调用len(_)时,_的值为'abc'

例如:

>>> 10
10
>>> _
10
>>> _ + 5
15
>>> _ + 5
20

这由sys.displayhook处理,_变量在builtins命名空间中包含intsum之类的内容,这就是为什么你不能在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函数。