iterable
pythonにおけるiterableは、__iter__をもつ hasattr(myObj, '__iter__')
一方、iteratorは、__next__を持つ。
iterableを iteratorにしてしまうと、next()がどこの状態(つぎに何を処理するか、終わったか)かを管理しないといけない。
iteratorのが__next__あって、より機能リッチだけど、故に身動きが取れないときもある。
stopiterationなのに、for loop(next) してしまうとか。
回答で勉強になったのは、
duck typing: try: iter(element)
type checking if instance(element, collection.Iterable)
duck typingは、実際にやってみてOKならOK.
おまけ
「ロックディレクトリが無ければ」+「作成して」の部分を「ロックディレクトリをまず作ってみて作成できたら」に変更しています
に似てる。
[