2017-09-26 79 views
-2

我有一個生成器函數,需要迭代器對象並對每個項目執行一些邏輯。這在更大的迭代列表上運行。然後它產生將結果返回給調用代碼,因此它可以打破forwhile迭代器耗盡後迭代器執行掛起

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開始)並返回提示。

我錯過了什麼?爲什麼我的迭代器在耗盡時會掛起?

+1

爲什麼downvotes?.. – Vinny

回答

3

迭代器不是掛着的,它是你的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 
+0

Oy,真是遺憾。感謝您指出這一點。 – Vinny

0

for循環不掛。外部while循環是。你已經將它設置爲從1-9病情變化一直運行下去,然後保持爲9。因此,代碼執行到:

while 9 

它總是返回真,這將成爲無限循環。