有人可以解释第二次跑步中发生了什么吗?当代码应该给出错误时,为什么会得到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
答案 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