迭代器耗尽后,迭代器执行会挂起
我有一个生成器函数,它接受迭代器对象并对每个项目执行一些逻辑。 这在更大的迭代列表上运行。 然后,它产生的结果返回给调用代码,因此它可以打破for
,并while
循环
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
我需要CTRL + C打破循环。 如果我使用常规范围(10),因此循环以值0开始,它会立即中断(因为condition=0
)并返回提示。
我错过了什么? 为什么我的迭代器在耗尽时会挂起?
迭代器不是挂起的,它是你的while
循环。 由于condition
在9
结束,while循环变为while 9
,而永不退出。 完全取出while循环。
for item in func(it):
condition = item
print condition
或者,如果您想在条件不正确时停止,则:
for item in func(it):
condition = item
print condition
if not condition: break
for循环没有挂起。 外部while循环是。 你已经将它设置为永久运行,条件从1-9改变,然后保持为9.所以,代码执行到:
while 9
它总是返回True,这成为一个无限循环。
链接地址: http://www.djcxy.com/p/53479.html上一篇: Iterator execution hangs after the iterator is exhausted