【发布时间】:2017-09-23 00:56:10
【问题描述】:
在 Python 3.5 shell 中输入以下代码给了我一个我没想到的答案,我知道非常基本,但请有人帮我解释一下。
>>> x = 5
>>> y = 2
>>> a = x*y
>>> x,y,a
(5, 2, 10)
>>> x = 3
>>> x,y,a
(3, 2, 10)
这些都在不同的行上,每行前面都有 >>>
我预计是 6,但“新”x 尚未使用。
【问题讨论】:
在 Python 3.5 shell 中输入以下代码给了我一个我没想到的答案,我知道非常基本,但请有人帮我解释一下。
>>> x = 5
>>> y = 2
>>> a = x*y
>>> x,y,a
(5, 2, 10)
>>> x = 3
>>> x,y,a
(3, 2, 10)
这些都在不同的行上,每行前面都有 >>>
我预计是 6,但“新”x 尚未使用。
【问题讨论】:
“a”变量只有在您有意更新时才会更新。 为了在更改 'x' 后更新 'a',您需要再次执行 a = x*y 行。
如果您将代码复制并粘贴到此处http://www.pythontutor.com/visualize.html#mode=edit,它将使您对正在发生的事情有一个很好的可视化!
【讨论】:
a = x*y 不是在您更改x 或y 时自动更新a 的方程式。当语句运行时,它将a 设置为x*y 一次。之后对x 或y 的任何更改都不会影响a。
当您更改x 或y 时,您需要手动更新a,或者,如果情况允许,请使用本地函数来执行@Silvio 的答案显示的操作。创建本地快捷方式来帮助清理代码很方便。
【讨论】:
当您分配a 时,该值即在此处设置。
a = x * y
使用x 和y 的当前 值。表达式 x * y 没有存储在任何地方,所以 Python 不可能知道更新它。如果您想要一个根据其变量的值自动更新的值,您可以使用闭包。
x = 5
y = 2
a = lambda: x * y
print(x, y, a()) # Prints 5 2 10
x = 3
print(x, y, a()) # Prints 3 2 6
这样可以确保每次调用 a 时都会计算表达式。
【讨论】:
a 变量不会被更新。您可能希望以这种方式创建函数
def a(x,y):
return x*y
然后你就可以创建元组了
(x, y, a(x,y))
【讨论】: