迭代器耗尽后,迭代器执行会挂起

我有一个生成器函数,它接受迭代器对象并对每个项目执行一些逻辑。 这在更大的迭代列表上运行。 然后,它产生的结果返回给调用代码,因此它可以打破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循环。 由于condition9结束,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

下一篇: Printing items out of a generator