Python 变量赋值问题
a,b = 0,1
while b < 50:
print(b)
a = b
b = a+b
输出结果:
1
2
4
8
16
32
而且:
a,b = 0,1
while b < 50:
print(b)
a,b = b, a+b
输出结果(正确的斐波那契数列):
1
1
2
3
5
8
13
21
34
它们不是一样的吗?我的意思是 a,b = b, a+b
本质上和 a = b
以及 b = a+b
分开写是一样的——对吧?
6 个回答
5
这两句话的意思是不一样的。
a = b
b = a+b
这个会先修改 a
的值,然后用修改后的值去改变 b
。实际上,它总是执行 b = b + b
。
a,b = b, a+b
这个则是同时改变 b
和 a
,所以 b
的计算是基于原始的 a
值。
5
它们不是一样的。在第一个例子中,a
被赋值为 b
的值,然后这个新值又加到 b
上。实际上就是 b + b
。
在第二个例子中,a
被赋值为当前的 b
的值,而 b
被赋值为当前的 a
加上当前的 b
。这个过程发生在 a
的值改变之前。
这两个赋值是同时发生的,而不是一个接一个地进行。
11
不,它们并不相同。
当你写 a,b = b, a+b
时,这里的赋值是“同时”进行的。a,b = b, a+b
和 (a, b) = (b, a+b)
是一样的。所以,在
a, b = 5, 8
a=5 和 b=8 的情况下,当Python看到这个
(a, b) = (b, a+b)
它首先计算右边的部分 (b, a+b)
,结果是 (8,13)
,然后将这个结果赋值给左边的部分,也就是 (a,b)
。
当你有: a = b
然后 b = a+b
时,这两个操作是一个接一个进行的。但对于每一个操作:
a = b
它首先计算右边的部分 b
,然后将这个值赋值给左边的部分,也就是 a
。接着
b = a + b
它首先计算右边的部分 a + b
,然后将这个值赋值给左边的部分,也就是 b
。