Python-多重赋值

Python-多重赋值,python,variable-assignment,multiple-assignment,Python,Variable Assignment,Multiple Assignment,最近,我在阅读Python官方文档时,遇到了一个关于如何对Fibonacci系列进行编码的示例,如下所示: a, b = 0, 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 a = 0 b = 1 while a < 10: print(a) a = b b = a + b

最近,我在阅读Python官方文档时,遇到了一个关于如何对Fibonacci系列进行编码的示例,如下所示:

a, b = 0, 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
a = 0
b = 1
while a < 10:
 print(a)
 a = b
 b = a + b
。。。输出更改为0、1、2、4、8

我理解多个作业的方式是,它将可以完成的工作缩减为两行,变成一行。但是很明显,如果我不能将这个逻辑应用于printa命令下的变量,那么这个推理肯定是有缺陷的


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

在多重赋值中,右边总是先计算出来的

实际上

a, b = b, a + b
同:

b = a + b
a = b

在多重赋值中,始终首先计算右侧

实际上

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。所以首先b变成0+1,然后a被赋予b=a的值,使其也变成1

如果你想了解更多关于这项工作的细节,你可以查看问题。

当你做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。所以首先b变成0+1,然后a被赋予b=a的值,使其也变成1

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

a=0 b=1 而a<10: 版画 a=b b=a+b 在这种情况下,a变成b,然后b变成变化的a+b

a、 b=0,1 而a<10: 打印 a、 b=b,a+b 在这种情况下,a变为b,同时b变为原始a+b

这就是为什么,在你的例子中,b变成了新的a+b,因为a=b,基本上意味着b=b+b。这就是为什么b的值每次都加倍。

a=0 b=1 而a<10: 版画 a=b b=a+b 在这种情况下,a变成b,然后b变成变化的a+b

a、 b=0,1 而a<10: 打印 a、 b=b,a+b 在这种情况下,a变为b,同时b变为原始a+b


这就是为什么,在你的例子中,b变成了新的a+b,因为a=b,基本上意味着b=b+b。这就是为什么b的值每次都加倍。

a,b=1,2,然后a,b=b,a+b输出2,3。但当a,b=1,2时,b=a+b;a=b输出3,3。它们是怎么回事?我认为这个问题实际上是你链接的问题的重复。。。但我也认为你误解了答案。首先计算=右侧的所有内容,然后才计算分配给左侧变量的值。事实上,这些任务从技术上讲是从左到右进行的,尽管这并不重要。哦,你是对的。我道歉。对另一个答案进行投票,我将编辑这个答案。a,b=1,2,然后a,b=b,a+b输出2,3。但当a,b=1,2时,b=a+b;a=b输出3,3。它们是怎么回事?我认为这个问题实际上是你链接的问题的重复。。。但我也认为你误解了答案。首先计算=右侧的所有内容,然后才计算分配给左侧变量的值。事实上,这些任务从技术上讲是从左到右进行的,尽管这并不重要。哦,你是对的。我道歉。把另一个答案投上去,我会编辑这个。这是不对的。正如Vthechamp的回答所说,左边的每个变量都被分配给右边变量的原始值——也就是分配之前的值。这是不正确的。正如Vthechamp的回答所说,左边的每个变量都被分配给右边变量的原始值——也就是分配之前的值。这是否回答了你的问题?对非常感谢。这回答了你的问题吗?对非常感谢。非常感谢你。真的帮了大忙,非常感谢。真的帮了大忙。