我正在使用Python解释器中的_
下划线,并想尝试一下它在代码中是否具有相同的行为。我在代码中使用下划线作为“无关”变量,例如:
_, a = someFunction()
然后在解释器中获取最后存储的值,如下所示:
>>> 2 + 2
4
>>> a = _
>>> a
4
现在,我尝试执行以下示例代码:
for i in range(5):
2 + 1
a = _
print (a)
在解释器中以及使用Python脚本编写并使用python underscore.py
运行。
考虑到行为_
下划线将保存最后存储的值,因为该值未格式化为'Do n't care'变量,预期结果将为2 + 1 = 3
,使{ {1}}最后存储的值,然后使用3
保存到a
变量中。
翻译的结果如下:
a = _
此结果按预期方式工作,而将相同代码的结果保存在Python脚本中并使用>>> for i in range(5):
... 2 + 1
... a = _
...
3
3
3
3
3
>>> print(a)
3
运行时,导致名称错误:
python underscore.py
在读取错误时,听起来似乎没有定义C:\Users\..\Python files>python underscore.py
Traceback (most recent call last):
File "underscore.py", line 3, in <module>
a = _
NameError: name '_' is not defined
变量,但是,尽管它可能与Python运行脚本的方式有关,但我只是想知道这两种情况之间的区别是什么是这样使结果导致某种程度上的逻辑答案(当您使用了一段时间这样的解释器时)和名称错误吗?
所以请不要误解我,我确实知道_
符号在Python中的作用。我要问的是为什么与在终端中以Python程序运行时,为什么解释器中的代码完全一样?
答案 0 :(得分:6)
对于那些发现有趣的人,借助@Chris_Rands,我发现Python解释器使用sys.displayhook
存储了最后使用的值,并在here上存储了更多的值。
data = [
{
attributes: [],
info: '',
meshes: [],
}
{
attributes: [],
info: '',
meshes: [],
}
.....so on....
]
。意味着它将仅在解释器中具有此行为,而不会在终端中运行的Python脚本中具有此行为。