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