ホームページ >バックエンド開発 >Python チュートリアル >Python の「yield」キーワードはジェネレータ関数で効率的なイテレータをどのように作成するのでしょうか?

Python の「yield」キーワードはジェネレータ関数で効率的なイテレータをどのように作成するのでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-25 17:44:10248ブラウズ

How Does Python's `yield` Keyword Create Efficient Iterators in Generator Functions?

Python では "yield" キーワードは何をしますか?

Python の "yield" キーワードは、特別な関数であるジェネレータ関数で使用されますイテレータとして機能する

ジェネレータ関数とイテレータ

  • イテレータ: 一連の値を一度に 1 つ生成するオブジェクト。
  • ジェネレータ関数: 特定の値の代わりにイテレータを返す関数。 「yield」キーワードを使用して、オンデマンドで値を生成します。

「yield」の機能

ジェネレーター関数が呼び出されたとき:

  • ジェネレーター関数はコードをすぐには実行しません。
  • 代わりに、戻り値が返されます。ジェネレータ オブジェクト。
  • このジェネレータ オブジェクトは、値を生成するイテレータです。

イテレータが「for」ループで使用される場合:

  • ループが初めて「yield」ステートメントに遭遇すると、ジェネレーター関数は実行を再開し、最初のステートメントを生成します。 value.
  • その後のループの反復により、ジェネレーター関数が再開され、値がなくなるまで次の値が生成されます。
  • ジェネレーター関数は、ロジックの終わりに達すると終了します。または、「return」ステートメントに遭遇します。

コード例説明

指定されたコード スニペットは、ノード クラス内で _get_child_candidates というジェネレーター関数を定義します。

  • この関数は、パラメーター distance、min_dist、および max_dist を受け取ります。
  • それらの距離が次の条件を満たす場合、左右の子ノードが生成されます。
  • 基準を満たす子がなくなった場合、ジェネレーター関数は終了します。

呼び出し側コード内:

  • 結果は空として初期化されます。 list.
  • candidates は現在のノードを含むリストとして初期化されますオブジェクト。
  • ループは候補を反復します。
  • ノードごとに距離をチェックし、条件を満たしている場合はその値を結果に追加します。
  • 次に候補を拡張します。 _get_child_candidates ジェネレーターから取得した子ノードを使用します。
  • ループは、すべての子ノードが取得されるまで継続します。

ジェネレータの利点

  • メモリ効率: ジェネレータは、リストとは異なり、すべての値をメモリに保存しません。
  • 遅延評価: ジェネレーターが反復処理される場合にのみ値が計算され、計算量が削減されます。オーバーヘッド。
  • 反復の高度な制御: ジェネレーター関数内のロジックを使用して、値の生成を制御できます。

以上がPython の「yield」キーワードはジェネレータ関数で効率的なイテレータをどのように作成するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。