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

循环中直接调用生成器函数与存储生成器对象的差异

两种生成器遍历写法的差异分析

先看示例代码:

def yield_range(x):
  for i in range(x):
    yield i

for x in yield_range(10):
  print(x)

yr_result = yield_range(10)
for x in yr_result:
  print(x)

这两种写法没有本质差异,执行结果完全一致——都会依次打印0到9的数字。

具体解释:

  • 第一种写法直接在for循环中调用yield_range(10),此时会创建一个生成器实例,循环过程中生成器以惰性求值的方式逐个产出值,遍历结束后这个生成器就会被耗尽。
  • 第二种写法只是提前把yield_range(10)创建的生成器实例赋值给了yr_result变量,后续再通过这个变量遍历生成器。本质逻辑和第一种完全相同,同样是惰性产出值,遍历完成后生成器也会被耗尽。

唯一的区别是是否将生成器对象提前存储:如果后续需要对这个生成器做额外操作(比如手动调用next()方法),提前存到变量里会更方便;如果只是一次性遍历,两种写法没区别。

内容的提问来源于stack exchange,提问作者jaypeg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:27:13