Python斐波那契生成器序列
我目前正在学习Python,对斐波那契数生成器有点着迷。经过几个小时的研究,我没有取得多大进展。我在某种程度上理解了输出,只是在我知道每次迭代都会发生什么之前,我不愿意转移到另一个主题Python斐波那契生成器序列,python,fibonacci,yield,Python,Fibonacci,Yield,我目前正在学习Python,对斐波那契数生成器有点着迷。经过几个小时的研究,我没有取得多大进展。我在某种程度上理解了输出,只是在我知道每次迭代都会发生什么之前,我不愿意转移到另一个主题 def fibonacci_generator() : a , b = 0 , 1 while True : yield a a , b = b , a + b fib = fibonacci_generator()
def fibonacci_generator() :
a , b = 0 , 1
while True :
yield a
a , b = b , a + b
fib = fibonacci_generator()
for i in fib :
if i > 100 :
break
else :
print( 'Generated:' , i )
运行此代码后,我看到以下输出
Generated: 0
Generated: 1
Generated: 1
Generated: 2
Generated: 3
Generated: 5
Generated: 8
Generated: 13
Generated: 21
Generated: 34
Generated: 55
Generated: 89
根据这里关于堆栈溢出的几个类似问题的答案,我确实理解第一次调用生成器时,a和be分别被初始化为0和1,然后带有yield语句(a=0)的值返回给调用方
为了节省一点时间,把事情弄清楚,我们有几个问题要问
总而言之,我想知道每行输出的具体操作是什么。我脑子里似乎想不清那部分。让我重申一下,我已经在很多不同的地方看过了,但我所看到的都没有帮助。作为背景,fibonacci_生成器是一个生成器函数,它返回一个生成器,实际上只是一个迭代器对象 在第一次迭代中,生成器生成一个,并在那里停止,直到您再次调用它。再次调用后,它会重新计算a和b,因为这是真的,所以进入循环,并生成重新计算的a。它只是不断重复这个过程 关于第二和第三个问题: 每当有赋值语句时,在赋值语句的右侧完成之前,左侧的变量不会被赋值 因此,
a,b=b,a+b
当您计算a+b
时,a
不等于b
,但它等于原来的值。换句话说,a,b=b,a+b
相当于:
temp = a
a = b
b = temp + b
如果您遵循这个逻辑,您将理解为什么代码的行为方式是这样的