Python イテレータについて

Python イテレータについて

イテレータの仕組みについて次のポイントが分かれば理解できます。

  • iter()関数でリストをイテレータ化します。
  • next関数でイテレータから要素を取り出します。
  • イテレータで取り出す値がない場合には例外を発生します。

イテレータは特に意識しなくてもfor in文などで活用されたいます。次の例で確認できます。

my_list = [1,2,3,4,5]
itr = iter(my_list)

print(next(itr))
print(next(itr))
print(next(itr))
print(next(itr))
print(next(itr))
print(next(itr))

結果

1
2
3
4
5
—————————————————————————
StopIteration Traceback (most recent call last)
in ()
7 print(next(itr))
8 print(next(itr))
—-> 9 print(next(itr))

StopIteration:

for in文と同じようにリストの内容を一つずつ取り出してくれます。そして要素が無くなった段階で「StopIteration」の例外を発生します。

ではイテレータをどのような場合に使用するかというと、それは自前のクラスにイテレータを仕込んで置いて独自のイテレートを行うときに活用します。range()を自作するようなものです。

class Hoge:
  def __init__(self,max):
    self._max = max
  
  def __iter__(self):
    self._n = 0
    return self
  
  def __next__(self):
    res = self._n
    if res > self._max:raise StopIteration
    self._n += 1
    return res
  
hoge = Hoge(2)
for i in hoge:
  print(i)
  
hoge = Hoge(3)
for i in hoge:
  print(i)

結果
0
1
2

0
1
2
3