Python语法澄清

use*_*726 2 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
Run Code Online (Sandbox Code Playgroud)

但我不明白最后一行,也不确定我会如何谷歌.

我该怎么读a, b = b, a+b,或者它是什么意思?

unu*_*tbu 5

Python首先评估赋值的右侧.它评估

b, a+b
Run Code Online (Sandbox Code Playgroud)

从左到右.然后,它分配值的变量ab分别.

所以a, b = b, a+b相当于

c = b
d = a+b
a = c
b = d
Run Code Online (Sandbox Code Playgroud)

除了它没有明确的临时变量就能达到结果.请参阅有关Python 评估顺序的文档.


这里有一个微妙的观点值得一试.假设a = 1,b = 2.

a, b = b, a+b
Run Code Online (Sandbox Code Playgroud)

相当于

a, b = 2, 1+2 
a, b = 2, 3
Run Code Online (Sandbox Code Playgroud)

因此a分配给2,b分配给3.

请注意,这等同于

a = b
b = a + b 
Run Code Online (Sandbox Code Playgroud)

由于第一行将分配

a = 2
b = 2 + 2 = 4
Run Code Online (Sandbox Code Playgroud)

请注意,完成此(错误)方式,b最终等于4,而不是3.这就是为什么知道Python首先评估赋值的右侧(在进行任何赋值之前)的重要性.