python iterator
iterableとの違い
iterable は __iter__ を持つ。 iterator は加えて、 __next__を持つ。
python protocol
PythonのIterableを順に追っていく - Qiita
ここでは、ざっくり簡単にいうと、IterableとIteratorを分離して、データ構造自体と、データの走査方法の役割を分担することで、それぞれの責任を分離でき、疎結合が実現できるからです。
for文では、
iterable_objが内部で__iter__を呼び出し、iteratorが生成され、iteratorの__next__を繰り返すような挙動になっています:
__next__ は具体的なイメージを持てるけど、__iter__は?
上記リンクの実装では、とりあえず selfを返してる。もっと凝った(用途を制限するが故に便利)実装もありえるかも。
#generator #python