ホームページ >ウェブフロントエンド >jsチュートリアル >ジェネレーター関数の実行の流れを制御するために、収量キーワードを使用するにはどうすればよいですか?
yield
キーワードを使用するにはどうすればよいですか? yield
キーワードは、関数内で使用され、ジェネレーターに変換されます。ジェネレーター関数は、単一の値を返して終了する代わりに、各yield
ステートメントで実行を一時停止し、呼び出し元に値を返します。関数の状態は保存されているため、次に呼ばれるときに中断された場所から実行を再開できます。これにより、シーケンス全体を一度に生成するのではなく、オンデマンドの値のシーケンスを生成できます。
例で説明しましょう:
<code class="python">def my_generator(n): for i in range(n): yield i*2 gen = my_generator(5) # Create a generator object for num in gen: print(num) # Output: 0, 2, 4, 6, 8</code>
この例では、 my_generator
リストを返しません。代わりに、 next(gen)
for
ループで暗黙的に行われる)への各呼び出しは、次のyield
ステートメントが発生するまで関数を実行します。生成された値は返され、関数の状態が保存されます。 next(gen)
への次の呼び出しは、最後のyield
の後のポイントから再開します。発電機は、関数が別のyield
に遭遇することなく実行を完了すると終了します。
yield
キーワードで使用することの利点は何ですか? yield
のあるジェネレーターを使用すると、リストの返却よりもいくつかの利点があります。
要するに、ジェネレーターは、シーケンス全体を一度に保存するメモリオーバーヘッドなしで、反復的に一連の値を生成する必要がある場合に理想的です。
for
if
、他のコントロールフローステートメントと組み合わせてyield
を使用できますか?はい、 if
、 elif
、 else
、for、 for
、およびwhile
generator functionのような他のコントロールフローステートメントとともに自由にyield
を使用できます。これにより、複雑で条件付きシーケンスを作成できます。
if
とLoops for
組み込む例は次のとおりです。
<code class="python">def even_numbers_generator(n): for i in range(n): if i % 2 == 0: yield i even_gen = even_numbers_generator(10) for num in even_gen: print(num) # Output: 0, 2, 4, 6, 8</code>
このジェネレーターは、 for
ループを使用して反復し、 if
条件を偶数フィルタリングし、指定された範囲内の偶数のみを生成します。
return
のコンテキストでは、 yield
キーワードはどのように違いますか?重要な違いは、それらが関数の実行にどのように影響するかにあります:
yield
:関数の実行を一時停止し、値を返し、関数の状態を保持します。この機能は、中断した場所から再開できます。return
:関数の実行を完全に終了します。関数の状態は失われ、それ以上の値を生成することはできません。ジェネレーター関数のreturn
ステートメントは、シーケンスの終わりを信号します。本質的に、 yield
イテレーターを作成しますが、 return
最終結果を提供し、プロセスを終了します。通常、発電機関数でのreturn
を使用すると、シーケンスの終わりを信号するために行われますが、値を生成する値return
こともできます(これは一般的ではありませんが)。値を生成せずにreturn
を使用すると、ジェネレーターではなく通常の機能が作成されます。
以上がジェネレーター関数の実行の流れを制御するために、収量キーワードを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。