拆分多个分配不会产生相同的输出

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=0y=1。然后,x, y = y, x+y 的计算结果为 x, y = 1, 0+1,因此 x, y = 1, 1y = 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,因此你的输出不断加倍