Iterator execution hangs after the iterator is exhausted
我有一个生成器函数,它接受迭代器对象并对每个项执行一些逻辑。这在更大的迭代列表上运行。然后将结果返回到调用代码,这样它就可以中断
1 2 3 4 5 6 7 8 9 10 11 12 | def func(it): item = next(it) item = item.execute() yield item it = iter(range(1, 10)) condition = True while condition: for item in func(it): condition = item print condition |
在python idle中执行此代码,打印以下内容并挂起:
1 2 3 4 5 6 7 8 9 | 1 2 3 4 5 6 7 8 9 |
我需要ctrl+c来打破循环。如果我使用常规范围(10),那么循环从值0开始,它会立即中断(因为
我错过了什么?为什么我的迭代器在耗尽时挂起?
迭代器不是挂起的,它是你的
1 2 3 | for item in func(it): condition = item print condition |
或者,如果要在条件为假时停止,则:
1 2 3 4 | for item in func(it): condition = item print condition if not condition: break |
for循环未挂起。外部while循环是。当条件从1-9变为9时,您已经将其设置为永久运行。因此,代码执行到:
1 | while 9 |
它总是返回真值,这就变成了一个无限循环。