generator


マネージャは、ウィジェットを作成する関数です.
イテレーションはクラスで__iter____next__、または__getitem__メソッドを実装する必要がありますが、イテレーションは関数でキーワード「歩留まり」のみを使用して終了します.だから私の小さなプログラムは小さなプログラムよりも簡単に書くことができます.

生産高の理解


関数で最終品目を使用すると、関数はデグレードされ、最終品目の値(変数)が指定されます.

for反復文でnumber generator()を指定して値を出力すると、完成品に指定された0、1、2が出力されます.使用方法はイテレーションと同じです.

ジェネレータオブジェクトが反復器であるかどうかを確認します


次にnumber generator関数を使用して作成したオブジェクトが本当にイテレーションであるかどうかを見てみましょう.dir関数を使用してメソッドのリストをチェックします.
>>> g = number_generator()
>>> g
<generator object number_generator at 0x03A190F0>
>>> dir(g)
['__class__', '__del__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__name__', '__ne__', '__new__', '__next__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'gi_code', 'gi_frame', 'gi_running', 'gi_yieldfrom', 'send', 'throw']
number generator関数を呼び出すと、ジェネレータオブジェクト(generator object)が返されます.dir関数を使用してオブジェクトを表示すると、小バージョンの__iter__メソッドと__next__メソッドが表示されます.
実際には、1つ以上のJENNERオブジェクトの__next__を呼び出すと、0、1、2の数字でStopIteration例外が発生します.
>>> g.__next__()
0
>>> g.__next__()
1
>>> g.__next__()
2
>>> g.__next__()
Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    g.__next__()
StopIteration
イテレーションと同じ動作です.
これにより、関数で歩留まりを使用するだけで、イテレーションを簡単に実装できます.ただし、イテレーションは__next__メソッドで直接値を返しますが、イテレーションで指定された値は__next__メソッド(next関数)の戻り値として使用されます.また、イテレーションはraiseを直接使用してStopIteration例外を生成しますが、イテレーションが関数の末尾に達すると自動的にStopIteration例外が発生します.
ジェネレータオブジェクトから__next__メソッドが呼び出されるたびに、ジェネレータは関数の「最終品目」(generate)までコードを実行します.だから名前は発電機です.

はつでんき



ただし、1つのJENNERオブジェクトから__iter__を呼び出すとselfが返されるため、同じオブジェクトが表示されます(JENNER関数の呼び出し>JENNERオブジェクトの呼び出し>__iter__はself戻り>JENNERオブジェクトです).
でもgenerateというキーワードを使えばいいのになぜyieldと名付けたのでしょうか?生産量は生産の意味であり、同時に譲歩の意味もある.すなわち,降伏を用いて値を関数に渡し,コード実行を関数に譲ることができる.したがって、最終品目は現在の関数を一時的に停止し、関数外のコードを実行します.

降伏の運動過程を理解する




これにより、関数を終了しない場合には、収益率を用いて値を外部に伝達することができる.すなわち、returnは関数を返すとすぐに終了しますが、returnは関数外のコードを一時的に実行させ、値を取得してから私のコードを実行し続けます.

完成品から関数を呼び出す


では、完成品で関数(メソッド)を呼び出すとどうなるのでしょうか.リスト内の文字列を大文字に変換し、関数の外に渡します.

リスト内のすべての文字列が大文字で出力されます.yield i.upper()のようなyieldで関数(メソッド)を呼び出すと、関数の戻り値が外部に渡されます.upperは呼び出し時に大文字の文字列を返すため、歩留まりが文字列を外部に渡します.つまり、収益率に何を指定しても、結果は外部にのみ渡されます(関数の戻り値、式の結果).
降伏点の挙動を知るだけで、小さなコントローラよりもずっと簡単になります.

値を1つの降伏値から外側に複数回伝達


これまで収益率で1回値を外部に渡してきました.したがって,値を複数回外部に伝達する際にforまたはwhile反復文の降伏値を用いた.リストの1,2,3を以下に示します.

この場合、毎回繰り返し文を使用する必要はなく、降伏fromを使用するだけです.yield fromは、重複可能なオブジェクト、イテレーション、およびイテレーションオブジェクトを指定します(yield fromはPython 3.3以降から提供されます).
重複可能オブジェクトの収益率
小バージョンからの生産高
ジェネレータオブジェクトから取得

「生産ソース」リスト(重複可能オブジェクト)で、xなどの生産ソースを指定します.これにより、リスト内の各要素が1つ外部に渡されます.すなわち,yield fromを1回用いて値を3回外部に伝達する.従って、next関数を3回呼び出すことができる(__next__メソッド).

収益率にジェネレータオブジェクトを割り当てる



まず、ジェネレータnumber generatorは、パラメータとしての数値が受信されるまで数値を作成します.次に、three generatorはgeneratorオブジェクトに降伏from number generator(3)を指定します.
number generator(3)は3つの数字を生成するのでsulfirmount generator(3)は3回数字を外部に伝達する.したがって、for反復文でthree generator()を使用してデジタルを3回出力する(next関数または__next__メソッドも3回呼び出すことができる).

ソース:リンクテキスト