ホームページ > バックエンド開発 > Python チュートリアル > Python の「yield」キーワードはジェネレータをどのように作成および管理するのでしょうか?

Python の「yield」キーワードはジェネレータをどのように作成および管理するのでしょうか?

DDD
リリース: 2024-12-21 08:51:09
オリジナル
474 人が閲覧しました

How Does Python's `yield` Keyword Create and Manage Generators?

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

はじめに

Python の yield キーワードを理解するには、イテラブルとジェネレーターについての知識が必要です。

Iterables

Iterables は一度に 1 つの要素を反復処理できるリストや文字列などのオブジェクト。

ジェネレーター

ジェネレーターは、シーケンス全体をメモリに保存せずに、一度に 1 つずつ値を生成する反復子です。

Yield

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

itertools モジュールは、反復可能オブジェクトを操作する関数を提供します。たとえば、リストの順列を簡単に作成できます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート