为什么这段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
相关产品推荐
相关产品推荐

