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はデータストリームを表現するオブジェクトである4。next操作によりストリームからデータを取り出すことができる。
next()メソッドのcallあるいはbuild-in next()関数への引渡しでデータが取り出される。ストリームからの取出しであり、枯渇した場合はStopIteration
が投げられる(それ以降は何度callしても同じ)。
iteratorは必然的に「メンバーを返せるオブジェクト」すなわちiterableであるため、iter()の実装が必須とされている。
なぜ分けるのか
-> "streamの複数回生成"ができるから.
streamを生成してデータが尽きるまで利用、またstream生成して利用、が可能.
機械学習でepochごとにstream生成すれば学習ループ回せる.
-
An object capable of returning its members one at a time. Python - iterable↩
-
“An object representing a stream of data.” Python - iterator ↩