Python - 多重赋值

Python - Multiple Assignment

最近我在阅读官方 Python 文档时遇到了有关如何编写斐波那契数列代码的示例,如下所示:

a, b = 0, 1 
while a < 10:
 print (a)
 a, b = b, a + b

输出到0,1,1,2,3,5,8

因为我自己从未使用过 多重赋值 ,所以我决定进入 Visual Studio 以弄清楚它是如何工作的。我注意到如果我将符号更改为...

a = 0
b = 1
while a < 10:
 print (a) 
 a, b = b, a + b

...输出保持不变。

但是,如果我将符号更改为...

a = 0
b = 1
while a < 10:
 print(a)
 a = b
 b = a + b

...输出变为0, 1, 2, 4, 8

我对多重赋值的理解是,它将两行可以完成的事情缩减为一行。但是显然,如果我不能将这个逻辑应用到 print(a) 命令下的变量,那么这个推理肯定是有缺陷的。

如果有人能解释为什么我的推理 is/what 是错误的,我们将不胜感激。

在多重赋值中,总是先计算右边。

实际上,

a, b = b, a + b

等同于:

b = a + b
a = b

当您执行 a, b = d, e 时,分配发生的顺序是从右到左。也就是说,b 首先被赋予 e 的值,然后另一个赋值发生。因此,当您执行 a, b = b, a + b 时,您实际上写的是

 b = a + b
 a = b

因此有所不同。

您可以通过

来验证这一点
a = 0
b = 1
while a < 10:
 a, b = b, a + b
 print(a, b)

第一个输出是1 1。所以首先 b 变为 0+1 并且 然后 a 被赋予 b=a 的值使其也成为 1.

如果您想了解有关其工作原理的更多详细信息,可以查看 this 问题。

a = 0
b = 1
while a < 10:
 print(a)
 a = b
 b = a + b

在这种情况下,a 变为 b 然后 b 变为 已更改 a + b

a, b = 0, 1 
while a < 10:
 print (a)
 a, b = b, a+b

在这种情况下,a 变为 b,同时 b 变为 original a + b。

这就是为什么在您的情况下 b 变成 new a + b,因为 a = b,基本上意味着 b = b + b.这就是为什么 b 的值每次都会翻倍。