为什么Python中调用next(nextSquare())总返回相同的yield生成结果?
问题原因
你每次执行next(nextSquare())时,都重新调用了nextSquare()生成器函数,创建了全新的生成器实例。每个新实例都会从i=1的初始状态开始运行,所以每次调用都只会返回第一个生成值1,无法得到递增的新数值。
生成器的运行状态是绑定在实例对象上的,只有对同一个实例反复调用next(),才会在上次暂停的位置继续执行,生成新的数值。
正确实现按需生成的方法
先创建一个持久化的生成器实例,之后所有取值操作都对这个实例执行即可:
# 仅执行一次生成器函数,保留实例的状态 square_gen = nextSquare()
需要取值时,对同一个实例调用next():
print(next(square_gen)) # 输出 1 print(next(square_gen)) # 输出 4 print(next(square_gen)) # 输出 9 # 任意时刻需要新值时重复调用即可,不需要依赖for循环
内容的提问来源于stack exchange,提问作者Shivam Sahil
相关产品推荐
相关产品推荐

