ホームページ > バックエンド開発 > Python チュートリアル > Python のイテレータとジェネレータ: いつどちらを使用するか?

Python のイテレータとジェネレータ: いつどちらを使用するか?

Linda Hamilton
リリース: 2024-11-25 19:16:11
オリジナル
722 人が閲覧しました

Iterators vs. Generators in Python: When to Use Which?

Python のジェネレーターとイテレーター

Python のイテレーターとジェネレーターはどちらも反復可能ですが、実装と使用方法が異なります。 case.

Iterators

Iterators は、一連の項目を走査するためのインターフェイスを提供する反復可能なオブジェクトです。これらには 2 つの主なメソッドがあります:

  • __iter__: イテレータ自体を返し、複数回反復できるようにします。
  • __next__: シーケンス内の次の項目を返します。項目がなくなったときに StopIteration を発生させます。

ジェネレーター

ジェネレーターは、yield キーワードを使用してオンザフライで値を生成する特殊なタイプのイテレーターです。 。呼び出されると、ジェネレーター関数は反復可能なジェネレーター オブジェクトを返します。

内部では、ジェネレーターは反復内の現在位置を追跡する中断された実行状態を保存します。ジェネレーターを反復処理する場合、__next__ メソッドは中断された関数を再開し、次の値を生成します。その後、実行は次の反復まで再び一時停止されます。

使用例

  • 反復子の使用:

    • 繰り返しにわたって状態を維持する必要がある場合 (例: カスタム複雑な動作を持つ反復子).
    • 反復以外に追加のメソッドを公開する必要がある場合 (例: current() メソッドと next() メソッドを持つクラス)。
  • ジェネレーターを使用する:

    • の場合単純さと効率が優先されます。
    • 中間リストを保存せずに値を遅延生成したい場合。
    • 反復を一時停止して再開したい場合 (例: 計算を後で実行するために一時停止する) use).

指定された範囲の平方数を生成する次の関数を考えてみましょう:

def squares(start, stop):
    for i in range(start, stop):
        yield i * i
ログイン後にコピー

この関数は、平方数を一度に 1 つずつ生成するジェネレーターを作成します。すべての二乗値の中間リストを作成する必要がないため、リスト内包表記やカスタム反復子よりも効率的です。

以上がPython のイテレータとジェネレータ: いつどちらを使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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