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

the*_*bat 34 python

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

>>> 'abc'
'abc'
>>> len(_)
3
>>> 
Run Code Online (Sandbox Code Playgroud)

Mar*_*off 52

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

例如:

>>> 10
10
>>> _
10
>>> _ + 5
15
>>> _ + 5
20
Run Code Online (Sandbox Code Playgroud)

这是通过处理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
Run Code Online (Sandbox Code Playgroud)

这将创建一个全局变量,用于隐藏_内置函数中的变量.要撤消赋值(并_从全局变量中删除),您必须:

>>> del _
Run Code Online (Sandbox Code Playgroud)

然后功能将恢复正常(builtins._将再次可见).

  • 仅供参考:REPL是Read-Eval-Print Loop的缩写.与往常一样,维基百科有更多信息,如果你想要它.http://en.wikipedia.org/wiki/Read-eval-print_loop (8认同)

u0b*_*6ae 18

为什么你看不到它?它在__builtins__

>>> __builtins__._ is _
True
Run Code Online (Sandbox Code Playgroud)

所以它不是全球性的,也不是本地的.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__.
Run Code Online (Sandbox Code Playgroud)

1 2012编辑:我称之为"超全球",因为其__builtin__成员随处可见,任何模块.