拆分多个分配不会产生相同的输出
Splitting multiple assignment doesn't produce the same output
是这样的语法吗:
x, y = 0,1
while y < 50:
print(y)
x, y = y, x+y
同理:
x = 0
y = 1
while y < 50:
print(y)
x = y
y = x+y
如果是这样,为什么他们打印出不同的结果?我试图了解第一个代码如何打印:1, 1, 3, 5, 8, 13, 21, 34
因为当我在脑海中调试 运行 第二个代码时它打印:1, 2, 8, 16, 32
。基本上我无法理解第一个代码是如何逐行工作的。
它们不一样。
在x, y = y, x+y
这样的多重赋值中,右边先求值。所以 x+y
被评估,然后 y
被设置为等于 x+y
.
说 x=0
和 y=1
。然后,x, y = y, x+y
的计算结果为 x, y = 1, 0+1
,因此 x, y = 1, 1
。 y = 1
.
在第二个示例中,x = y
导致 x = 1
,下一行 y = x+y
导致 y = 2
.
之所以给出不同的结果是因为在第一个代码中,你同时修改了x和y,而在第二个代码中,先增加x,然后修改y,这是不利的。
第一个代码在 Python 中使用多重赋值,您在其中创建一个元组并对其进行循环并为每个变量赋值
这就是 Python 处理您的线路的方式:
(x,y) = (y,x+y)
这段代码是正确的:你可以遍历观察,
x,y = 0,1
x,y = 1,1
x,y = 1,2
x,y = 2,3
x,y = 3,5
第二个代码完全错误:
x = y
y = x+y
因为 x 在第一行用 y 初始化:
因此第二行是 y = 2*y,因此你的输出不断加倍
是这样的语法吗:
x, y = 0,1
while y < 50:
print(y)
x, y = y, x+y
同理:
x = 0
y = 1
while y < 50:
print(y)
x = y
y = x+y
如果是这样,为什么他们打印出不同的结果?我试图了解第一个代码如何打印:1, 1, 3, 5, 8, 13, 21, 34
因为当我在脑海中调试 运行 第二个代码时它打印:1, 2, 8, 16, 32
。基本上我无法理解第一个代码是如何逐行工作的。
它们不一样。
在x, y = y, x+y
这样的多重赋值中,右边先求值。所以 x+y
被评估,然后 y
被设置为等于 x+y
.
说 x=0
和 y=1
。然后,x, y = y, x+y
的计算结果为 x, y = 1, 0+1
,因此 x, y = 1, 1
。 y = 1
.
在第二个示例中,x = y
导致 x = 1
,下一行 y = x+y
导致 y = 2
.
之所以给出不同的结果是因为在第一个代码中,你同时修改了x和y,而在第二个代码中,先增加x,然后修改y,这是不利的。
第一个代码在 Python 中使用多重赋值,您在其中创建一个元组并对其进行循环并为每个变量赋值
这就是 Python 处理您的线路的方式:
(x,y) = (y,x+y)
这段代码是正确的:你可以遍历观察,
x,y = 0,1
x,y = 1,1
x,y = 1,2
x,y = 2,3
x,y = 3,5
第二个代码完全错误:
x = y
y = x+y
因为 x 在第一行用 y 初始化: 因此第二行是 y = 2*y,因此你的输出不断加倍