提问人:Tom Brady 提问时间:12/21/2020 最后编辑:Gautham MTom Brady 更新时间:12/21/2020 访问量:774
Python - 多重赋值 [duplicate]
Python - Multiple Assignment [duplicate]
问:
最近,当我看到有关如何对斐波那契数列进行编码的示例时,我正在阅读官方 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)
如果有人能解释为什么这是我的推理有什么问题,我将不胜感激。
答:
-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, e
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)
第一个输出是 。所以首先成为,然后 a 被赋予使它也的值。1 1
b
0+1
b=a
1
如果您想了解有关其工作原理的更多详细信息,可以查看此问题。
评论
1赞
Countour-Integral
12/21/2020
a, b = 1, 2
然后输出 .但是当输出 (3, 3) 时。它们有什么相同之处?a, b = b, a + b
(2, 3)
a, b = 1, 2
b = 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
在这种情况下,成为然后成为改变的a
b
b
a
+ b
a, b = 0, 1
while a < 10:
print (a)
a, b = b, a+b
在这种情况下,成为并同时成为 a + b。a
b
b
original
这就是为什么,在你的情况下成为新的,因为 ,基本上意味着 .这就是为什么每次的价值都会翻倍。b
a + b
a = b
b = b + b
b
上一个:如何简化这些多重分配?
评论