ホームページ >バックエンド開発 >Python チュートリアル >Python の「yield」キーワードはジェネレータをどのように作成および管理するのでしょうか?
Python の yield キーワードを理解するには、イテラブルとジェネレーターについての知識が必要です。
Iterables は一度に 1 つの要素を反復処理できるリストや文字列などのオブジェクト。
ジェネレーターは、シーケンス全体をメモリに保存せずに、一度に 1 つずつ値を生成する反復子です。
yield キーワードは、ジェネレーター関数の return ステートメントのように機能します。ただし、関数を終了する代わりに、実行を一時停止して値を返します。イテレーターが再開すると、一時停止したところから実行が続行されます。
ジェネレーター:
def _get_child_candidates(self, distance, min_dist, max_dist): # Check if a left child exists and the distance is within range if self._leftchild and distance - max_dist < self._median: yield self._leftchild # Check if a right child exists and the distance is within range if self._rightchild and distance + max_dist >= self._median: yield self._rightchild
このジェネレーター関数は子ノードを返します。指定された距離内でrange.
呼び出し元:
result, candidates = [], [self] # Initialize empty result and candidates list while candidates: # Iterate while candidates are available node = candidates.pop() distance = node._get_dist(obj) if distance <= max_dist and distance >= min_dist: # Check distance range result.extend(node._values) candidates.extend(node._get_child_candidates(distance, min_dist, max_dist)) # Add children to candidates list return result
呼び出し元は、ループ中にジェネレーター関数を使用して候補ノードのリストを初期化し、候補ノードのリストを反復処理します。距離範囲をチェックし、必要に応じて子ノードを追加します。
yield キーワードを使用すると、ジェネレーターの枯渇を制御できます。反復を停止するフラグを設定すると、ジェネレーター値へのアクセスを一時停止したり再開したりできます。
itertools モジュールは、反復可能オブジェクトを操作する関数を提供します。たとえば、リストの順列を簡単に作成できます。
以上がPython の「yield」キーワードはジェネレータをどのように作成および管理するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。