为什么生成器函数不能用于下一次调用?
Why generator function does not work with the next call?
一个生成器函数:
def getPositiveCount():
n = 0
while n<100:
yield n
n+=1
上面的生成器函数在 next(..)
方法中调用时没有达到预期效果。为什么 next 总是调用 return 0?
print(next(getPositiveCount())) # prints 0
print(next(getPositiveCount())) # prints 0; should've printed 1
print(next(getPositiveCount())) # prints 0; should've printed 2
但是,如果我将其设置为一个循环,它就可以正常工作:
for i in getPositiveCount():
print(i)
# prints 0,1,2 ... 99
这也再次让我问,生成器函数是否与生成器表达式(通常使用范围、xrange 或类似类型的内置函数)相同?例如生成器表达式中的 next
调用完美无缺:
squares = (n** 2 for n in range(5))
print(next(squares)) # 0
print(next(squares)) # 1
print(next(squares)) # 4
每次调用 getPositiveCount()
都会创建一个全新的生成器。你在想这个:
gen = getPositiveCount()
print(next(gen))
print(next(gen))
print(next(gen))
一个生成器函数:
def getPositiveCount():
n = 0
while n<100:
yield n
n+=1
上面的生成器函数在 next(..)
方法中调用时没有达到预期效果。为什么 next 总是调用 return 0?
print(next(getPositiveCount())) # prints 0
print(next(getPositiveCount())) # prints 0; should've printed 1
print(next(getPositiveCount())) # prints 0; should've printed 2
但是,如果我将其设置为一个循环,它就可以正常工作:
for i in getPositiveCount():
print(i)
# prints 0,1,2 ... 99
这也再次让我问,生成器函数是否与生成器表达式(通常使用范围、xrange 或类似类型的内置函数)相同?例如生成器表达式中的 next
调用完美无缺:
squares = (n** 2 for n in range(5))
print(next(squares)) # 0
print(next(squares)) # 1
print(next(squares)) # 4
每次调用 getPositiveCount()
都会创建一个全新的生成器。你在想这个:
gen = getPositiveCount()
print(next(gen))
print(next(gen))
print(next(gen))