意外的Python for循环行为?

Sat*_*tya 0 python

有人可以解释第二次运行中发生的事情吗?当代码出错时,为什么我得到9的流?


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

这是第二轮

>>> for __ in range(10): #second run
...     print(_)
...
9
9
9
9
9
9
9
9
9
9
>>> exit()
Run Code Online (Sandbox Code Playgroud)

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

NameError: name '_' is not defined
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

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

保留的分类器和标识符参考:

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

来自sys.displayhook():

如果值不是None,则此功能将打印repr(value)sys.stdout并保存值builtins._.sys.displayhook调用在交互式Python会话中输入的表达式的结果调用[...] .

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

NameError指示您重新启动Python解释器,也没有运行一个表达式语句但所产生的非None值:

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