イテレータ

「イテレータ(Iterator)」は、プログラム内でシーケンス(リスト、タプル、文字列など)やコレクション(リスト、セット、辞書など)の要素を逐次的に取り出すためのオブジェクトです。イテレータは通常、要素の集合に対してループを実行するために使用され、次の要素を取り出すたびに内部の状態を更新します。

イテレータは、次の2つの基本的なメソッドを持っています:

  1. __iter__() メソッド:

    • このメソッドはイテレータ自体を返します。通常、このメソッドは単に self を返します。
  2. __next__() メソッド:

    • このメソッドは次の要素を返します。要素がない場合、StopIteration 例外を発生させます。イテレータは内部の状態を保持し、次の要素を取得するたびに状態が進行します。

Pythonでは、イテレータを作成するために以下の方法があります:

  1. ジェネレータ関数:

    • ジェネレータ関数を定義すると、その関数からジェネレータオブジェクトが作成されます。ジェネレータオブジェクトはイテレータとして機能し、yield キーワードを使用して逐次的に値を生成できます。
  2. iter() 関数と __iter__() メソッドの実装:

    • クラス内で __iter__() メソッドを実装し、そのメソッド内で自身を返すことで、クラスをイテレータとして使用できます。また、iter() 関数を使用してイテレータオブジェクトを作成できます。

以下はジェネレータ関数を使用したイテレータの例です:

python
def countdown(n): while n > 0: yield n n -= 1 # ジェネレータ関数からイテレータオブジェクトを作成 iterator = countdown(5) for num in iterator: print(num)

このコードでは、countdown 関数はジェネレータ関数であり、イテレータとして動作します。yield キーワードを使用して値を生成し、for ループでその値を逐次取り出して表示しています。