たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

Python iterable/iteratorの定義

iterable

iterable1自身のメンバーを1度に1つ返しうるオブジェクトである2。具体例はlist, str, tuple, dict, file obj, iterを実装するclassなどなど。
build-in関数のiter()に渡すとiteratorが返る。
iter()関数相当の操作を様々な言語機能が暗示的にサポートしている (e.g. for statement, zip)

iterator

iterator3データストリームを表現するオブジェクトである4next操作によりストリームからデータを取り出すことができる。
next()メソッドのcallあるいはbuild-in next()関数への引渡しでデータが取り出される。ストリームからの取出しであり、枯渇した場合はStopIterationが投げられる(それ以降は何度callしても同じ)。
iteratorは必然的に「メンバーを返せるオブジェクト」すなわちiterableであるため、iter()の実装が必須とされている。

なぜ分けるのか

-> "streamの複数回生成"ができるから.

streamを生成してデータが尽きるまで利用、またstream生成して利用、が可能.
機械学習でepochごとにstream生成すれば学習ループ回せる.


  1. https://docs.python.org/3/glossary.html#term-iterable

  2. An object capable of returning its members one at a time. Python - iterable

  3. https://docs.python.org/3/glossary.html#term-iterator

  4. “An object representing a stream of data.” Python - iterator