为什么生成器函数不能用于下一次调用?

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))