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 サイトの他の関連記事を参照してください。