Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 迭代器耗尽后,迭代器执行挂起_Python_Loops_Iterator_Generator - Fatal编程技术网

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,这将成为一个无限循环。

为什么会有反对票?。。