今回は Python におけるイテレータと next() メソッドについて説明します。
イテレータとは
イテレータは繰り返しを抽象化したもので、組み込みのリストなどのコレクションオブジェクトの要素を繰り返し参照するために使われます。例えば、for 文では内部的にイテレータを使って繰り返しを実現しています。
イテレータの基本的な使い方
next()でリストの要素を順番に取り出す
iter() 関数を使うと、引数に指定した組み込みのリスト等のコレクションに対して __iter()__ メソッドを適用し、イテレータオブジェクトを返します。
1 2 |
>>> iter([1,2,3,4,5]) <listiterator object at 0x7f3738e54110> |
listiterator object が返されています。イテレータオブジェクトがもつ next() メソッドは、呼び出される度に元のリスト要素を順番に返します。要素がなくなった場合は、next() は StopIteration という例外を送出(raise)します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>> i = iter([1,2,3,4,5]) >>> i.next() 1 >>> i.next() 2 >>> i.next() 3 >>> i.next() 4 >>> i.next() 5 >>> i.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration |
for文とイテレータ
for 文では、内部的にイテレータを使って繰り返しを実現しています。
1 2 |
for x in [1,2,3,4,5]: print x |
上記の for 文では、内部的にはリストを引数として iter() 関数を実行し、イテレータオブジェクトを生成します。生成したイテレータオブジェクトについて StopItration 例外が発生するまで next() メソッドを実行し、戻り値を変数 x に代入して for ブロックの処理を実行しています。