1

最近,我在阅读官方 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)命令下的变量上,这个推理肯定是有缺陷的。

如果有人能解释为什么这是/我的推理有什么问题,将不胜感激。

4

3 回答 3

4
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变为originala + b。

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

于 2020-12-21T06:41:40.093 回答
1

当您a, b = d, e按照从右到左的顺序进行分配时。也就是说,首先给 be赋值,然后进行另一个赋值。所以当你做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

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

于 2020-12-21T06:30:21.260 回答
-1

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

有效,

a, b = b, a + b

是相同的:

b = a + b
a = b
于 2020-12-21T06:30:06.880 回答