他の人の Python ソース コードを読んでいるときに、yield キーワードに出会いました。さまざまな検索を通じて、最終的にそれを理解しました。要約は次のとおりです:
通常の for...in... ループでは、in の後に配列が続きます。この配列は、リンクされたリスト、文字列、ファイルと同様の反復可能なオブジェクトです。 mylist= [1, 2, 3] または mylist = [range(3) の x の x*x] にすることができます。欠点は、すべてのデータがメモリ上にあるため、データ量が多いと大量のメモリを消費することです。 (推奨される学習: Python ビデオ チュートリアル )
ジェネレーターは反復できますが、読み取ることができるのは 1 回だけです。それは使用するときに生成されるからです。たとえば、mygenerator = (x*x for x in range(3)) となります。ここでは () が使用されており、配列ではなく、上記の例は [] であることに注意してください。
ジェネレーターの反復機能を理解する上で重要なのは、ジェネレーターに next() メソッドがあるということです。動作原理は、例外がキャッチされるまで next() メソッドを繰り返し呼び出すことです。上記の mygenerator を使用してテストできます。
yield を備えた関数は、通常の関数ではなく、反復に使用できるジェネレーター ジェネレーターであり、動作原理は上記と同じです。
yield は return に似たキーワードで、反復中に yield に遭遇すると、yield の後の値が返されます。重要なのは、次の反復では、前の反復で発生したyieldの後のコードから実行が開始されるということです。
簡単な理解: yield は、return が値を返し、返された位置を記憶し、次の反復がこの位置から開始されることを意味します。
yield を含む関数は、for ループ内で使用されるだけでなく、この関数のパラメーターで反復パラメーターが許可されている限り、関数のパラメーターとしても使用できます。たとえば、array.extend 関数のプロトタイプは array.extend(iterable) です。
send(msg) と next() の違いは、send は、yield 式にパラメータを渡すことができることです。このとき渡されたパラメータは、yield 式の値として使用され、yield のパラメータとして使用されます。は呼び出し元に返される値です。 ——つまり、sendは前回のyield式の値を強制的に変更できるということですね。たとえば、関数には、yield の代入、a
= yield 5 があります。ここでの最初の反復では 5 が返されますが、a には値が割り当てられていません。 2 番目の反復では、.send(10) を使用します。その後、式 a の値が、元々は None であった 10 に強制的に変更され、その後、a=10
send(msg) と next() の両方が実行されます。戻り値は、現在の反復で yield が発生したときの、yield の後の式の値です。実際、これは、現在の反復の yield の後のパラメーターです。
最初の呼び出しは next() または send(None) でなければなりません。それ以外の場合はエラーが報告されます。send 後に None になっているのは、この時点では以前の利回りがないためです (第 8 条による) )。 next() は send(None) と同等であると考えることができます。
Python 関連の技術記事の詳細については、Python チュートリアル 列にアクセスして学習してください。
以上がPython の利回りとは何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。