【问题标题】:Splitting multiple assignment doesn't produce the same output [duplicate]拆分多个分配不会产生相同的输出[重复]
【发布时间】:2020-01-20 18:17:32
【问题描述】:

这是语法吗:

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。在 Python 中,首先计算操作的右手。所以x, y = y, x + y首先在右边求值,然后赋值发生。
  • 我想这更好地说明了x, y = 0, 1,导致x = 0y = 1。然后x, y = y, x + y 导致x, y = 1, 0 + 1,这导致x = 1y = 1

标签: python variable-assignment


【解决方案1】:

它们不一样。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      第一个代码在 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,因此您的输出会不断加倍

      【讨论】:

        猜你喜欢
        • 2021-07-16
        • 2012-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-11
        • 2020-04-25
        • 2017-01-20
        • 2021-11-28
        相关资源
        最近更新 更多