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

Python中yield from是否比循环内yield执行速度更快?

yield from 性能与使用场景说明

性能差异结论

从你多轮不同迭代量级的测试结果,已经能得出明确结论:迭代量级足够大时,yield from的执行性能确实优于手动编写for循环+yield的生成器包装写法。

你测试中迭代范围仅100时出现普通yield耗时更低的情况,属于极小数据量下的正常波动:此时计时误差、函数初始化的固定开销占比远高于语法本身的执行成本,结果没有参考意义。当迭代量升到10万级以上,yield from的性能优势就会稳定显现,迭代规模越大,二者的耗时差距越明显。

性能差距的核心原因非常直接:

  • 手写for i in gen: yield i的逻辑跑在Python字节码层,每一次迭代都要经过中间包装生成器的栈帧,走完整的取值、调度、返回流程,存在大量重复的解释器开销。
  • yield from是CPython在C层面实现的原生语法糖,会直接打通外层调用方和内层子生成器的传输通道,产出值不需要经过中间包装层的字节码周转,自然省掉了很多冗余消耗。

生成器包装场景的选型建议

绝大多数只做透传的生成器包装场景,都应该优先选择yield from,优势不止性能一点:

  • 除了值传输效率更高,yield from会自动透传生成器的send()、throw()、close()调用,把调用方传入的值、抛出的异常正确传递给内层子生成器。这部分逻辑如果靠手写循环实现,需要补大量边界处理代码,很容易写出bug。
  • 写法更简洁,代码可读性更强,看到yield from就能直接判断这里是做生成器透传逻辑。

只有一种场景不需要硬用yield from:如果你包装生成器时需要附加额外逻辑——比如过滤部分产出值、对值做加工转换、在迭代前后插入自定义操作,直接写循环实现对应逻辑后再yield即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:57:11