发现python赋值的一个特性,同行赋值可以这样?

a = 3
b = 5
a, b = a + b, a
print(a, b)

结果是:a=8,b=3

本以为如此,a被a+b赋值之后,再进行b=a的赋值,还用了中间变量,结果python居然有这样的特性。在此记录一下

a + b, a 实际上是创建一个元组 (8,3) 作为中间结果。

然后再把这个(8,3)元组解包分别赋值给a和b。

这种赋值方式很巧妙。比如a,b两值互换,a,b=b,a。

计算Fibonacci数列:

def fib(n):

    a=1

    b=0

    f=[]

    for i in range(n):

        a,b=b,a+b

        f.append(b)

    return f   

print(fib(10))

这个在Python里面叫交叉赋值

 a, b = c, d 操作的原理是先暂存元组 (c, d),然后 “按左右顺序” 赋值给 a 和 b 。

我觉得所给的代码可以认为和以下代码等效(相当于两边都是元组,然后元组内的元素对应赋值)  :

a = 3
b = 5
(a, b) = (a + b, a)
print(a, b)
# 注:实测输出结果为  8 3