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



