yieldキーワードの使用法のpython3

Pythonの本を見たときに今日、yieldキーワードで使用されるコードのセクションがありますが、私が使用だかわからない、非常に理解していません。情報を確認し、非常に良い使用をもたらすこと、あなたと共有します:

 

python3でそのように、発電機として知られている任意の機能を得るために使用されます。

DEF COUNT(N):
    しばらくN-> 0:
        N-#生成降伏値:N- 
        N-- 1 =。

別の言い方:ジェネレータはイテレータ関数戻り、通常の関数との差が、yield文が含まれているが生成されているが、より簡単に理解ジェネレータは、イテレータです。

収率を用いて、関数は、オブジェクト・タイプが「発電機」、連続コールスルーオブジェクト__next __()メソッドは、値のシーケンスを返すで返し、関数は、シーケンスを生成することを可能にします。

DEF COUNT(N):
     しばらく N-> 0:
         収率 N-   生成された値:N- 
        。N-- = 1 


C = COUNT(5 プリント(C. __next__())  出力:. 5 
プリント(C。__next__())  出力:4

のみ__next()を呼び出しジェネレーター機能__それは文の中の関数を実行するために始めた方法など、:プリントアウトを増やします

デフ(n)をカウント:
     プリント" BGN ... " のn> 0:
         歩留まりのn   生成值:N 
        、N - = 1

カウント機能を呼び出す場合:C =数(5)、および "... BGN" を印刷しません。唯一のコール次のC .__ __()まで、実際のステートメントの内側に行います。各呼び出しの__next __()メソッド、ステートメントの降伏n個の場所まで実行する関数を数える__次__()__(__next再び呼び出さ値nを生成している値を返すメソッドは、)、関数は歩留まり次の文を実行し続けると。

上記の出力からわかるように、一度だけ、次の2 C .__ __、「BGN ...」出力と呼ばれ、何も出力を「...終わりません」。「終了...」イテレータの値は反復が出力する前に完了している場合にのみ。あなたがメソッドを呼び出す__next__されている場合は、反復に値なしの実装は、プログラムはエラーになるとき:

トレースバック(最新の呼び出しの最後):

一般的に次のように完全なコードは、ループに使用__next__手動メソッドを呼び出していません。

DEF (N)カウント:
     プリント" BGN ... " しながら、 N> 0:
         収率 N   生成值:N 
        、N - = 1枚のプリント" 端... " のためにカウント(5 ):
     プリント(私)
    


次のように出力されます。

 

おすすめ

転載: www.cnblogs.com/coco2015/p/11203183.html