イテレータ
要素を順番に取り出すオブジェクト。
イテレータ
要素を順番に取り出すオブジェクト。
ジェネレータ
値を生成する関数。
イテラブル
イテレータを作成できるオブジェクト。
yield
ジェネレータで値を返すキーワード。
StopIteration
イテレータの終了を示す例外。
イテレータの基本
なぜイテレータが必要か?
イテレータは、要素を順番に取り出すのに適しています。forループやリスト内包表記で広く使用されています。
いつ使うか?
- 要素を順番に取り出す場合
- forループを使用する場合
- リスト内包表記を使用する場合
- 大量のデータを処理する場合
実践テクニック
iter()を使う
iter()を使うことで、イテラブルからイテレータを作成できます。これにより、イテレータプロトコルを実装できます。
next()を使う
next()を使うことで、イテレータから次の要素を取得できます。これにより、イテレータを手動で進めることができます。
# イテレータの基本numbers = [1, 2, 3, 4, 5]iterator = iter(numbers)
print(next(iterator)) # 1print(next(iterator)) # 2print(next(iterator)) # 3
# イテレータプロトコルclass MyIterator: def __init__(self, data): self.data = data self.index = 0
def __iter__(self): return self
def __next__(self): if self.index < len(self.data): result = self.data[self.index] self.index += 1 return result else: raise StopIteration
my_iter = MyIterator([1, 2, 3])for item in my_iter: print(item)ジェネレータ
なぜジェネレータが必要か?
ジェネレータは、値を必要なときに生成するのに適しています。メモリ効率が良く、大量のデータを処理する場合に有効です。
いつ使うか?
- 大量のデータを処理する場合
- メモリ効率を重視する場合
- 無限シーケンスを作成する場合
- 遅延評価を行う場合
実践テクニック
yieldを使う
yieldを使うことで、ジェネレータを作成できます。これにより、値を必要なときに生成できます。
ジェネレータ式を使う
ジェネレータ式を使うことで、簡潔にジェネレータを作成できます。これにより、コードを簡潔に記述できます。
# ジェネレータの基本def my_generator(): yield 1 yield 2 yield 3
gen = my_generator()print(next(gen)) # 1print(next(gen)) # 2print(next(gen)) # 3
# ジェネレータ式numbers = [1, 2, 3, 4, 5]squared = (x * x for x in numbers)for num in squared: print(num)イテレータプロトコル
なぜイテレータプロトコルが必要か?
イテレータプロトコルは、イテレータを実装するのに適しています。__iter__()と__next__()メソッドを実装する必要があります。
いつ使うか?
- カスタムイテレータを作成する場合
- forループで使用できるオブジェクトを作成する場合
- イテレータプロトコルを実装する場合
実践テクニック
__iter__()を実装する
__iter__()を実装することで、イテレータを返すことができます。これにより、forループで使用できます。
__next__()を実装する
__next__()を実装することで、次の要素を返すことができます。要素がない場合はStopIterationを投げる必要があります。
合格ライン
イテレータを作成できる
ジェネレータを作成できる
イテレータプロトコルを実装できる
イテレータの使い分けができる
演習課題
課題1: イテレータの作成
イテレータを作成し、要素を順番に取り出してください。
課題2: ジェネレータの作成
ジェネレータを作成し、値を生成してください。
課題3: イテレータプロトコルの実装
イテレータプロトコルを実装し、forループで使用してください。
参考文献
この記事は以下の公的ガイドライン/標準に基づいています。
- Python Glossary - Iterator - 公式ドキュメント
- Python Glossary - Generator - 公式ドキュメント
- Python Standard Types - Iterator Types - 公式ドキュメント