【发布时间】:2019-09-21 23:22:29
【问题描述】:
我在 Python 解释器中使用了 _ 下划线,并想尝试它是否在代码中具有相同的行为。我在代码中使用下划线作为“无关”变量,如下所示:
_, a = someFunction()
并在解释器中获取最后存储的值,像这样:
>>> 2 + 2
4
>>> a = _
>>> a
4
现在我尝试执行以下示例代码:
for i in range(5):
2 + 1
a = _
print (a)
在解释器中以及用 Python 脚本编写并使用 python underscore.py 运行。
考虑到_ 下划线将保存最后存储的值的行为,因为它没有被格式化为“无关”变量,预期结果将是2 + 1 = 3,使3 最后一个存储的值,然后使用a = _ 保存到a 变量中。
翻译的结果如下:
>>> for i in range(5):
... 2 + 1
... a = _
...
3
3
3
3
3
>>> print(a)
3
此结果按预期工作,而保存在 Python 脚本中并使用 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 程序运行时的行为不同?
【问题讨论】:
-
如果您认为骗子错了,我可以重新打开,但您似乎已经了解其中的区别,所以我不确定您在问什么
-
@Chris_Rands 我只是想知道为什么
_的行为在 Python 代码和解释器之间是不同的。您发布的答案是代码中_的含义,是的,我知道它的作用 -
好的,我重新打开了,但你问他们什么?关于 python 解释器如何实现的内部结构?或者关于不同行为的基本原理?查找
sys.displayhook -
对
_的特殊赋值仅在您以交互模式执行表达式 时发生。这不是这里发生的事情 - 您正在执行一个 statement(for循环),它没有分配任何价值。
标签: python python-3.7