Python语法澄清

时间:2014-04-01 19:29:02

标签: python

滚动浏览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,或者它是什么意思?

2 个答案:

答案 0 :(得分:5)

Python首先评估作业的右侧。它评估

b, a+b

从左到右。然后,它会分别将值分配给变量ab

所以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