为什么a,b=b,a+;b不等于a=b,b=a+;b当我在python中运行fib()时?
我是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
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的值。您的缩进没有意义。请修复。可能的副本