一行给多个变量赋值
我正在尝试制作斐波那契数列,但我不明白为什么这个:
def fibonacci(n):
f1 = 0
f2 = 1
i = 1
while i < n:
print(f2)
f1 = f2
f2 = f1 + f2
i += 1
return f3
会返回 1, 2, 4, 8,而这个:
def fibonacci(n):
f1 = 0
f2 = 1
i = 1
while i < n:
print(f2)
f1, f2 = f2, f1 + f2
i += 1
return f3
却返回斐波那契数列。
3 个回答
0
变量 f1 和 f2 同时 获取新的值,分别是 f2 和 f1 + f2,这个表达式是:
f1, f2 = f2, f1 + f2。
这说明右边的表达式会先计算完 再进行赋值。也就是说,f1 + f2 使用的是 f1 的旧值,而不是新的值。右边的表达式是从左到右依次计算的。
1
在第一个例子中,前一次循环中得到的 f1
的值在更新 f2
之前被丢弃了。
f1, f2 = f2, f1 + f2
可以看作是更简洁的写法
tmp = f1
f1 = f2
f2 = tmp + f2
如果这样能让你更明白的话。后者是你在很多其他编程语言中为了达到同样效果需要做的事情。
5
在后面的例子中,右边的部分会先被计算:
f1, f2 = f2, f1 + f2
所以在计算 f2
的时候,使用的 f1
的值是“旧的”值。
在你的代码中,当你执行:
f1 = f2
f2 = f1 + f2
到计算 f2
的新值时,f1
的值已经改变了。