滚动浏览python 2.7文档我遇到了这个片段
def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while b < n:
print a,
a, b = b, a+b
但我不明白最后一行,也不确定我会如何谷歌。
我应该如何阅读a, b = b, a+b
,或者它是什么意思?
答案 0 :(得分:5)
Python首先评估作业的右侧。它评估
b, a+b
从左到右。然后,它会分别将值分配给变量a
和b
。
所以a, b = b, a+b
等同于
c = b
d = a+b
a = c
b = d
除了它在没有显式临时变量的情况下实现结果。 请参阅Python evaluation order上的文档。
这里有一个微妙的观点值得一试。假设a = 1,b = 2。
a, b = b, a+b
相当于
a, b = 2, 1+2
a, b = 2, 3
因此a
分配给2,b
分配给3。
请注意, 等同于
a = b
b = a + b
由于第一行会分配
a = 2
b = 2 + 2 = 4
请注意,执行此(错误)方式,b
最终等于4,而不是3.这就是为什么知道Python首先评估赋值的右侧(在进行任何赋值之前)的重要性)。
答案 1 :(得分:4)
将a设置为b,b设置为a + b,无需中间变量。它也可以通过以下方式完成:
temp = a
a = b
b = temp + b