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

Why a, b = b, a + b is not equal to a = b, b = a + b when I running a fib() in python?

我是 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

相反,Python 编译器首先通过转换以下表达式来评估表达式的右手:

a = 0
b = 1
a, b = b, a + b

进入这个:

a = 0
b = 1
a, b = 1, 1

然后按正确的顺序赋值。 所以 ab 变成 1.