Python解释器将最后一个表达式值分配给_
。
此行为仅限于REPL解释器,并且旨在帮助进行交互式编码会话:
>>> import math
>>> math.pow(3.0, 5)
243.0
>>> result = _
>>> result
243.0
的 标准 Python解释去一些长度上虽然用户定义的值不踩; 如果您自己分配其他 东西 ,_
那么解释器将不会覆盖它(从技术上讲,_
变量是__builtin__
attribute,您自己的分配是“常规”全局变量)。但是,您没有使用标准的Python解释器。您正在使用IPython,并且该解释器不是那么小心。
IPython明确记录了此行为:
以下GLOBAL变量始终存在(因此请不要覆盖它们!):
[…]
在标准的Python REPL环境中,如果您分配了一些东西,_
您仍然可以通过__builtins__._
或删除_
再次遮蔽它的全局变量来访问最后一个表达式结果del _
。
_
按照惯例,在Python解释器之外,它用作可翻译文本函数的名称(请参阅gettext
模块;外部工具会寻找该函数以提取可翻译字符串)。
而且,按照惯例,将其_
用作分配目标会告诉您的代码读者您将忽略该值;例如[random.random() for _ inrange(5)]
,foo, bar, _ =three_values
将不使用生成5个随机浮点值的列表,或用信号表示元组分配的第三个值。当_
已经用于gettext
功能时,__
可以用于相同的目的。