小编eda*_*dam的帖子

为什么生成器函数在下一次调用时不起作用?

生成器函数:

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)

python generator python-3.x

1
推荐指数
1
解决办法
633
查看次数

标签 统计

generator ×1

python ×1

python-3.x ×1