猿问

为什么我需要先将生成器函数存储到变量中?

我正在探索在 python 中使用生成器,但我遇到了一个奇怪的问题。


以下代码怎么能按预期工作(例如,每次调用函数时都返回下一个斐波那契数):


def fibonacci():                                       

    current, previous = 0,1                             

    while True:                                         

        yield current

        current, previous = current + previous, current


fib = fibonacci()


for i in range(0,21):

    print(next(fib))

但是当我直接在 for 循环中调用该函数时,如下所示:


for i in range(0,21):

    print(next(fibonacci()))

它打印出 21 个零?


慕雪6442864
浏览 191回答 1
1回答

繁星点点滴滴

正如克里斯在他的评论中所说:因为那样你会在每次迭代中创建新的生成器对象,一遍又一遍地获取第一个元素。您可以通过直接迭代它来避免将其分配给变量。这样你只创建一个生成器对象:for n, i in zip(fibonacci(), range(0,21)):    print(n)
随时随地看视频慕课网APP

相关分类

Python
我要回答