序説log

備忘録兼動機付け

イテレーター(Python)

typing記法で目に止まり、スルーしていたiterator。勉強メモです。

 

iteratorはもとのオブジェクトのコピー

イテレーター=iter(オブジェクト)でコピーを生成。オブジェクトがリストなどiterableなものだと、next(イテレーター)でコピーから1こずつ取りだすことができる。取り出すとコピーからは消えるので、nextをやりきるとイテレーターは空っぽになる。

 

→そう、for x in list1 とかのfor文は実はiteratorを回していたのである!

 

・def __iter__():はクラス内オブジェクトをiterableにする。

例えば

class Mylist:
def __init__(self):
self._my_list =
 

ml = Mylist()
ml._my_list.extend(['a', 'b', 'c'])

for goods in ml._my_list:
print(goods)

をいじって

class Mylist:
def __init__(self):
self._my_list =
def __iter__(self): # <-付け足し
return iter(self._my_list)

ml = Mylist()
ml._my_list.extend(['a', 'b', 'c'])

for goods in ml:
print(goods)

と、my_listのイテレーターを返すように関数を書いてやることで、スッキリとfor文を回すことができる。他にも、iterableを引数にとる関数がスッキリ使えてコードの抽象度が上がる(=直感的に理解しやすくなる、かも...)。