Python - 多重赋值 [duplicate]

Python - Multiple Assignment [duplicate]

提问人:Tom Brady 提问时间:12/21/2020 最后编辑:Gautham MTom Brady 更新时间:12/21/2020 访问量:774

问:

最近,当我看到有关如何对斐波那契数列进行编码的示例时,我正在阅读官方 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)

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

python 变量 多重赋值

评论

2赞 python_user 12/21/2020
这回答了你的问题吗?Python 中的多个赋值和评估顺序

答:

-1赞 KKJ 12/21/2020 #1

在多重分配中,始终首先计算右侧。

实际上,

a, b = b, a + b

等同于:

b = a + b
a = b

评论

2赞 CrazyChucky 12/21/2020
这是不正确的。正如 Vthechamp 的回答所说,左边的每个变量都被分配给右边变量的原始值,即它们在赋值前的值。
1赞 Ananda 12/21/2020 #2

当您执行从右到左的分配顺序时。也就是说,首先为 b 赋值,然后发生另一个赋值。因此,当你做你有效地写作的事情时,a, b = d, eea, b = b, a + b

 b = a + b
 a = b

因此存在差异。

您可以通过执行以下操作来验证这一点

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

第一个输出是 。所以首先成为,然后 a 被赋予使它也的值。1 1b0+1b=a1

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

评论

1赞 Countour-Integral 12/21/2020
a, b = 1, 2然后输出 .但是当输出 (3, 3) 时。它们有什么相同之处?a, b = b, a + b(2, 3)a, b = 1, 2b = a + b; a = b
1赞 CrazyChucky 12/21/2020
我认为这个问题实际上是您链接的问题的重复......但我也认为你误读了答案。首先计算右侧的所有内容,然后才将值分配给左侧的变量。(事实上,从技术上讲,这些任务是从左到右进行的,尽管这无关紧要。=
4赞 ekl1pse 12/21/2020 #3
a = 0
b = 1
while a < 10:
 print(a)
 a = b
 b = a + b

在这种情况下,成为然后成为改变abb a + b

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

在这种情况下,成为并同时成为 a + b。abboriginal

这就是为什么,在你的情况下成为新的,因为 ,基本上意味着 .这就是为什么每次的价值都会翻倍。ba + ba = bb = b + bb