【问题标题】:Why does (a,b)=(b,a) work when a=b+a; b=a doesn't? [duplicate]为什么 (a,b)=(b,a) 在 a=b+a 时起作用; b=a 不是吗? [复制]
【发布时间】:2019-10-27 04:39:00
【问题描述】:

我尝试在 python 中生成斐波那契,但我注意到,如果我通过交换来生成它,它会给我一个不同的值,而不是我通过简单赋值来生成它

def fib_num(max):
    a = 0
    b = 1
    for i in range(max):
         # a,b = b+a,a  this way it is right

         # but if I will implement it like below with simple assigment,
         # I am not going to get the same result Why???
         a  = b+a  
         b = a

         yield a

【问题讨论】:

  • 因为在第二个示例中,您已经更改了 a 的值,之前然后将该新值分配给 b
  • temp = a a = a+b b = temp 就像 a, b = a+b, a

标签: python python-3.x


【解决方案1】:

多重赋值隐含地为您创建一个临时变量。您的代码正在为 a 分配一个新值,当您再次使用它时,它将具有 new 值,而不是旧值:

a = b + a  
b = a

正确的等效解决方案是:

temp = a
a = b + a  
b = temp

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 2014-03-29
    • 1970-01-01
    • 2010-12-08
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2021-11-28
    相关资源
    最近更新 更多