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

问题描述 投票:-1回答:3

是此语法:

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。基本上我无法理解第一个代码是如何逐行工作的。

python variable-assignment
3个回答
0
投票

他们不一样。

[在多个分配中,例如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


0
投票

它们给出不同结果的原因是,在第一个代码中,您同时修改x和y,但是在第二个代码中,首先增加x,然后修改y,这是不利的。


0
投票

第一个代码在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,因此您的输出将继续加倍

© www.soinside.com 2019 - 2024. All rights reserved.