Python 迭代器耗尽后,迭代器执行挂起
我有一个生成器函数,它接受迭代器对象,并对每个项执行一些逻辑。这将在更大的迭代列表上运行。然后,将结果返回给调用代码,这样它就可以在循环时中断和的Python 迭代器耗尽后,迭代器执行挂起,python,loops,iterator,generator,Python,Loops,Iterator,Generator,我有一个生成器函数,它接受迭代器对象,并对每个项执行一些逻辑。这将在更大的迭代列表上运行。然后,将结果返回给调用代码,这样它就可以在循环时中断和的 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): conditi
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
在pythonidle中执行此代码,打印以下内容并挂起:
1
2
3
4
5
6
7
8
9
我需要按CTRL+C组合键来打破循环。如果我使用常规的范围(10)使循环以值0开始,它会立即中断(因为条件=0
)并返回提示
我错过了什么?为什么我的迭代器在耗尽时挂起?迭代器不是挂起的,而是您的
while
循环。由于条件
在9
处结束,while循环变为while 9
,它永远不会退出。完全取出while循环
for item in func(it):
condition = item
print condition
或者,如果要在条件为false时停止,则:
for item in func(it):
condition = item
print condition
if not condition: break
for循环没有挂起。外部while循环是。您已将其设置为永远运行,条件从1-9更改,然后保持为9。因此,代码执行为:
while 9
它总是返回True,这将成为一个无限循环。为什么会有反对票?。。