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
的值每次都会翻倍。
最近我在阅读官方 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
的值每次都会翻倍。