2017-11-28 4 views
-3

が私のコードです:バージョン2を与えたなぜこの2つの非常に短いコードが同じではないのですか? (収量、発電機)ここで

バージョン1

def X(): 
    while True: 
     pos = something.find("xxx") 
     if pos != -1: 
      yield pos 
     break 

バージョン2

def X(): 
    while True: 
     pos = something.find("xxx") 
     if pos == -1: 
      break 
     yield pos 

バージョン1は、私の1件の結果を与えました私はすべての結果! WTF?

+2

これらは全く異なるものです。第1のループは、最初の反復の後に常に壊れる。 –

+1

あなたは '休憩 'が何をしているのか知っていますか? –

答えて

0

バージョン1では、最初の反復の終了時にすぐに(そして無条件に)ループを切断します。

バージョン2では、文字列"xxx"が見つからない場合にのみループを中断しています。

0

両方の関数はジェネレータ関数ですが、バージョン1では位置を調べて-1と比較し、条件を満たす場合は結果を返します。そうでない場合はループを中断します。

def X(): 
    while True: 
     pos = something.find("xxx") 
     if pos != -1: 
      yield pos 
     break 

バージョン2では、ファイル-1の終わりに達するか、または-1の値としてposを得るまで、結果を保持します。

def X(): 
    while True: 
     pos = something.find("xxx") 
     if pos == -1: 
      break 
     yield pos 
関連する問題