生成器函数:
def getPositiveCount():
n = 0
while n<100:
yield n
n+=1
Run Code Online (Sandbox Code Playgroud)
上面的生成器函数在方法中调用时不会执行预期的操作next(..)。为什么next调用总是返回0?
print(next(getPositiveCount())) # prints 0
print(next(getPositiveCount())) # prints 0; should've printed 1
print(next(getPositiveCount())) # prints 0; should've printed 2
Run Code Online (Sandbox Code Playgroud)
但是,如果我将其设置为循环,它就可以正常工作:
for i in getPositiveCount():
print(i)
# prints 0,1,2 ... 99
Run Code Online (Sandbox Code Playgroud)
这也让我再次问,生成器函数与生成器表达式(通常使用 range、xrange 或类似类型的内置函数)相同吗?例如,next生成器表达式中的调用完美地工作:
squares = (n** 2 for n in range(5))
print(next(squares)) # 0
print(next(squares)) # 1
print(next(squares)) # 4
Run Code Online (Sandbox Code Playgroud)