Python の Iterator と「Lazy Iterator」の違いは何ですか?

王林
リリース: 2023-05-09 18:40:16
転載
1325 人が閲覧しました

Python では、イテレータは、リストやタプルなどの一連の値を反復処理できるようにするオブジェクトです。これは、__iter__() と __next__() という 2 つのメソッドを実装することで機能します。 __iter__() メソッドは反復子オブジェクト自体を返しますが、 __next__() メソッドはシーケンス内の次の値を返します。返す値がなくなると、StopIteration 例外が発生します。

標準カスタム反復子:

class Squares:
    def __init__(self, n):
        self.n = n
        self.current = 0
    
    def __iter__(self):
        return self
    
    def __next__(self):
        if self.current >= self.n:
            raise StopIteration
        else:
            result = self.current ** 2
            self.current += 1
            return result
 
# Using the iterator
squares = Squares(5)
for square in squares:
    print(square)
ログイン後にコピー

Python では、 iter() は、指定された反復可能オブジェクトの反復子を返す組み込み関数です。

反復可能オブジェクトとは、リスト、タプル、セット、辞書、__iter__() メソッドを定義するカスタム オブジェクトなど、反復可能なオブジェクトです。

iter() が反復可能オブジェクトに対して呼び出されると、 next() メソッドを使用して反復子オブジェクトを返し、反復可能オブジェクトからの一連の値を一度に 1 つずつ提供します。

iter() 関数は、シーケンスの要素のフィルタリング、マッピング、削減などのタスクを実行するためにループや他のイテレータとともに使用されることがよくあります。

iter() 関数で作成されたイテレータ:

numbers = [1, 2, 3, 4, 5]
iterator = iter(numbers)
 
print(next(iterator))  # Output: 1
print(next(iterator))  # Output: 2
print(next(iterator))  # Output: 3
ログイン後にコピー

lazy iterator:

「lazy iterator」は、すべての値を生成するわけではない特別なタイプのイテレータです。シーケンスで。代わりに、必要に応じてそれらを生成します。これは、すべての値を一度に生成して大量のメモリを消費することを避けるため、非常に大規模または無限のシーケンスを扱う場合に役立ちます。

Python では、遅延反復子は多くの場合、ジェネレーター関数 (ジェネレーターは、yield キーワード を使用する関数です) を使用して実装され、一度に 1 つの値を返します。値が要求されるたびに、ジェネレーターは中断したところから再開し、シーケンス内の次の値を生成します。 rree

以上がPython の Iterator と「Lazy Iterator」の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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