You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:15:03