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

为什么这段Python代码中的嵌套生成器会无限迭代?

生成器无限迭代的原因

核心原因是gen_row内部套了while True死循环,具体执行逻辑如下:

  • yield from 可迭代对象的作用是依次产出该对象的所有元素,当对象所有元素都产出完毕后,这个语句就执行完成,会继续运行后面的代码
  • 你的代码里yield from j的外层包裹了while True,所以每次j的所有元素都迭代完之后,while True会立刻触发下一轮循环,重新从头迭代j的所有元素,这个过程会无限重复
  • gen_chars返回的四个生成器都是gen_row的实例,每个实例绑定了对应的字符串参数,所以每个生成器都会循环产出对应字符串的字符,永远不会终止。

如果需要生成器迭代完一次字符串内容就结束,直接删除gen_row中的while True即可,修改后代码如下:

def gen_chars():
    def gen_row(j):
        yield from j

    for l in ['1234', 'abc', 'ABC', '0']: yield gen_row(l)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:36:03