意外的Python for循环行为?

时间:2019-02-23 15:46:50

标签: python

有人可以解释第二次跑步中发生了什么吗?当代码应该给出错误时,为什么会得到9的流?


>>> for __ in range(10): #first run
...     print(__)
...
0
1
2
3
4
5
6
7
8
9

这是第二次跑步

>>> for __ in range(10): #second run
...     print(_)
...
9
9
9
9
9
9
9
9
9
9
>>> exit()

此后,当我第三次运行代码时,相同的代码按预期执行,并出现以下错误。我意识到这个问题没有实际用途。但是,我真的很想知道为什么会发生吗?

NameError: name '_' is not defined

1 个答案:

答案 0 :(得分:5)

_变量是在Python解释器中设置的,始终保存已运行的任何表达式语句的最后一个非None结果。

来自Reserved Classifiers and Identifiers reference

  

在交互式解释器中使用特殊标识符_来存储上一次评估的结果;它存储在builtins模块中。

并且来自sys.displayhook()

  

如果值不是None,则此函数将repr(value)打印到sys.stdout,并将值保存在builtins._中。 [...]根据评估在交互式Python会话中输入的expression的结果调用sys.displayhook

在这里,结果是9,来自您必须在共享代码之前运行过的表达式。

NameError表示您重新启动了Python解释器,但尚未运行表达式语句,但该语句产生了非None值:

>>> _
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name '_' is not defined
>>> 3 * 3
9
>>> _
9