これらをみると僕はitertoolsのcountもifilterも知ってることは知ってるがうまく使えてないのが良く分かる。a.next()3のように次の整数を返すgeneratorです。ちなみにgeneratorとはイテレータになってる関数で例のようにnextメソッドで次々に新しい値を返します。ちなみにcountを自分で実装すると以下のようになります。代わりにyieldで値を返すのがポイントです。m.next()4イテレータなのでfor構文でまわすことも出来ます。10countにifilterをかけることによって特定の数字を抜かすことができるgeneratorを試しに作ってみます。2行目で4以外の整数のリストを作っているのではなく、nextメソッドが呼ばれるたびに4じゃないかどうかを評価しています。g)...これは2行目で2,3,4,5,6...とnextメソッドで次々と整数を返すgeneratorを生成してgとする。3行目で無限ループ4行目でgの次をprimeという変数に入れる5行目yieldでprimeを返す6行目gをprimeで割ったら0にならないフィルターを追加したgeneratorに変更する。1週目primeは2gは2で割ったら0にならない整数を返すgenerator2週目primeはg.next()で2で割っても0にならない2の次の整数ということで3gは2で割っても、3で割っても0にならない3の次の整数を生成するgenerator3週目primeはg.next()で2でも3で割っても0にならない3の次の整数ということで4じゃなくて5gは2,3,5で割っても0にならない5の次の整数を生成するgenerator4週目primeはg.next()で2,3,5で割っても0にならない5の次の整数ということで6じゃなくて7gは2,3,5,7で割っても0にならない7の次の整数を生成するgeneratorと一巡するたびに増えていくフィルターを通るかどうかをg.next()するたびに計算しているわけですね。再帰を避ける方法も含めて実にエレガンス。Arcsinueblog。