2017-09-26 17 views
-2

私は、イテレータオブジェクトを取得し、すべてのアイテムに対していくつかのロジックを実行するジェネレータ関数を持っています。これは、より大きな反復リストで実行されます。イテレータが使い果たされた後にイテレータが実行されないようにします

1 
2 
3 
4 
5 
6 
7 
8 
9 
:それから、 利回り呼び出し元のコードに結果、それは forwhileループPythonのIDLEにこのコードを実行する

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 

を破ることができるようには、次のとハングを印刷します

ループを解除するには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

オイ、どのような恥です。それを指してくれてありがとう。 – Vinny

0

ザ・ループ用がぶら下がっていません。外側whileループはです。あなたは、コードが実行されるまで、1-9から条件の変更として永遠に実行するように設定し、だから、9として残っています

while 9 

常にtrueを返し、これが無限ループになります。

関連する問題