イテレータとはなんですか ― Python勉強中 10
最近サボり気味だったけれどちょっとずつ再開。
イテレータについてまとめてみる。
まず、みんpyにはこう書いてある。
複数の要素を持ったデータの要素を順番に取り出すとき、より汎用的な手法を提供するのがイテレータです。
ようするに、色んなデータ型で使える「データを順番に取り出す方法」を提供してくれるらしい。
色んなデータ型で使えるのでルールはいたってシンプル。
- 次の要素を取り出す
- 要素が終わったかどうかを判別する
以上2つだけ。
>>> for t in (1,2,3): ... print(t) ... 1 2 3 >>> for l in [1,2,3]: ... print(l) ... 1 2 3 >>> for d in {1:'a',2:'b',3:'c'}: ... print(d) ... 1 2 3
これまで見てきたfor文も、タプルやリストや辞書のデータ型を裏でイテレータオブジェクトへ変換しているので、自動的に順番に取り出す事ができているということみたいです。
Pythonでは、イテレータオブジェクトへ変換する関数として iter() が用意されています。また、次の要素を取り出す処理を next() メソッドでおこない、要素がなくなると StopIteration という例外が発生します。
>>> i = iter([1,2,3]) >>> i.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'list_iterator' object has no attribute 'next'
あ、あれっ!?
ん…あー、Python3 では next() ではなく __next__() のようです。
>>> s = iter('string') >>> s.__next__() 's' >>> s.__next__() 't' >>> s.__next__() 'r' >>> s.__next__() 'i' >>> s.__next__() 'n' >>> s.__next__() 'g' >>> s.__next__() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
これでよし。