『Effective Python』の続き。イテレータは使い捨て。 www.effectivepython.com
イテレータは状態を持っている(ステートフル)ので、「使い終わった」という状態が存在する。また、「使い終わった」と「元々何も無い」が区別できない(どちらもStopIteration
例外を送出するだけなので)。何度も使いたい場合はコンテナクラスを定義しておこう、という話やそもそも生イテレータを受け付けない、という対策を打つといった方法がある。
この章はサンプルがまるごと掲載されているので気になる方は読んでいただきたい。 www.effectivepython.com
この手のバグ?は結構悩まされていたが、こういうことだったのかとわかってうれしかった思い出がある。このサンプルを翻訳してこのブログに公開しようとしたのがこの一連の記事のきっかけである。何とか、合法的に公開したいのだが上手い方法はあるだろうか。