【发布时间】:2019-02-01 12:07:32
【问题描述】:
我正在探索在 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 个零?
【问题讨论】:
-
因为你在每次迭代中都会创建新的
generator对象,一遍又一遍地获取第一个元素。 -
谢谢,我明白了。我不知道对 fibonacci() 的第一次调用是初始化生成器对象。想知道为什么这个问题会得到如此多的负面回应,因为这对我来说并不那么明显。