ホームページ  >  記事  >  バックエンド開発  >  Python の Iterator と「Lazy Iterator」の違いは何ですか?

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

王林
王林転載
2023-05-09 18:40:161301ブラウズ

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 までご連絡ください。