为什么我需要先将生成器函数存储到一个变量中?
Why do I need to store generator function to a variable first?
我正在探索 python 中生成器的使用,但我 运行 遇到了一个奇怪的问题。
以下代码如何按预期工作(例如,每次调用函数时 returns 下一个斐波那契数):
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 个零?
正如克里斯在评论中所说:
Because then you are making new generator object in every iteration, getting first element over and over.
您可以避免通过直接迭代将其分配给变量。这样你只创建一个生成器对象:
for n, i in zip(fibonacci(), range(0,21)):
print(n)
我正在探索 python 中生成器的使用,但我 运行 遇到了一个奇怪的问题。
以下代码如何按预期工作(例如,每次调用函数时 returns 下一个斐波那契数):
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 个零?
正如克里斯在评论中所说:
Because then you are making new generator object in every iteration, getting first element over and over.
您可以避免通过直接迭代将其分配给变量。这样你只创建一个生成器对象:
for n, i in zip(fibonacci(), range(0,21)):
print(n)