为什么a,b=b,a+;b不等于a=b,b=a+;b当我在python中运行fib()时?

为什么a,b=b,a+;b不等于a=b,b=a+;b当我在python中运行fib()时?,python,fibonacci,Python,Fibonacci,我是python编程新手,正在尝试基于生成器编写fib。我试过这个: def fib(n): a = 0 b = 1 for _ in range(n): yield a print(a) a, b = b, a + b print((a,b)) 还有这个: def fib(n): a = 0 b = 1 for _ in range(n): yield a a = b b = a + b print(l

我是python编程新手,正在尝试基于生成器编写fib。我试过这个:

def fib(n):
  a = 0
  b = 1
  for _ in range(n):
     yield a
     print(a)
     a, b = b, a + b
     print((a,b))
还有这个:

def fib(n):
  a = 0
  b = 1
  for _ in range(n):
    yield a
    a = b 
    b = a + b
print(list(fib(a)))

结果是不同的,为什么会发生这种情况?

逐步进行并找出原因

a = 0
b = 1

# loop starts:                         # loop starts
yield a    # yields 0,   a=0, b=1      yield a        # yields 0,   a=0, b=1
a = b      #             a=1, b=1      a, b = b, b+a  #             a=1, b=1
b = a + b  #             a=1, b=2
# loop
yield a    # yields 1,   a=1, b=2      yield a        # yields 1,   a=1, b=1
a = b      #             a=2, b=2      a, b = b, b+a  #             a=1, b=2
b = a + b  #             a=2, b=4
# loop
yield a    # yields 2    a=2, b=4      yield a        # yields 1,   a=1, b=2
a = b      #             a=4, b=4      a, b = b, b+a  #             a=2, b=3
b = a + b  #             a=4, b=8
# etc...

Python不会破坏这一点

a, b = b, a + b 
为此:

a = b
b = a + b
a = 0
b = 1
a, b = 1, 1
相反,Python编译器首先通过转换以下内容来计算表达式的右侧:

a = 0
b = 1
a, b = b, a + b
为此:

a = b
b = a + b
a = 0
b = 1
a, b = 1, 1
然后按正确的顺序分配。
因此
a
b
变为1。

将这两种情况下的步骤写在纸上,你就会明白原因。您正在使用前覆盖a的值。您的缩进没有意义。请修复。可能的副本