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

Is the single underscore “_” a built-in variable in Python?

我不明白这个下划线的意思。它是一个神奇的变量吗?我在locals()和globals()中看不到它。

1
2
3
4
5
>>> 'abc'
'abc'
>>> len(_)
3
>>>


在标准python repl中,_表示最后返回的值——在您调用的点上,_是值。

例如:

1
2
3
4
5
6
7
8
>>> 10
10
>>> _
10
>>> _ + 5
15
>>> _ + 5
20

这是由sys.displayhook处理的,而_变量将进入builtins命名空间,其中包括intsum等内容,这就是为什么在globals()中找不到它的原因。

注意,在Python脚本中没有这样的功能。在脚本中,_没有特殊含义,不会自动设置为上一语句生成的值。

另外,如果您想像上面那样使用repl,请注意在repl中重新分配_

1
2
3
4
5
6
7
8
9
>>> _ ="underscore"
>>> 10
10
>>> _ + 5

Traceback (most recent call last):
  File"<pyshell#6>", line 1, in <module>
    _ + 5
TypeError: cannot concatenate 'str' and 'int' objects

这将创建一个全局变量,隐藏内置的变量。要撤消分配(并从全局删除_),必须:

1
>>> del _

然后功能将恢复正常(将再次显示builtins._)。


为什么你看不见?它位于__builtins__

1
2
>>> __builtins__._ is _
True

所以它既不是全球性的也不是地方性的。1个

这项任务是在哪里完成的?sys.displayhook

1
2
3
4
5
6
7
8
>>> 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年编辑:我称之为"超级全球",因为任何模块中的所有成员都可用。


通常,我们在python中使用uu来绑定ugettext函数。