# 5.13 `itertools` -- 効率的なループ実行のためのイテレータ生成関数

バージョン2.3 以降で新規追加された 仕様です。

このモジュールではイテレータを構築する部品を実装しています。プログラム言 語HaskellとSMLからアイデアを得ていますが、Pythonに適した形に修正されてい ます。

このモジュールは、高速でメモリ効率に優れ、単独でも組み合わせても使用する ことのできるツールを標準化したものです。標準化により、多数の個人が、それ ぞれの好みと命名規約で、それぞれ少しだけ異なる実装を行う為に発生する可読 性と信頼性の問題を軽減する事ができます。

ここで定義したツールは簡単に組み合わせて使用することができるようになって おり、アプリケーション固有のツールを簡潔かつ効率的に作成する事ができます。

例えば、SMLの作表ツール`tabulate(f)`は`f(0), f(1), ...`のシー ケンスを作成します。このツールボックスでは`imap()`と `count()`を用意しており、この二つを組み合わせて `imap(f, count())`とすれば同じ結果を得る事ができます。

同様に、`operator`モジュールの高速な関数とも一緒に使用すること ができるようになっています。

他にこのモジュールに追加したい基本的な構築部品があれば、開発者に提案して ください。

イテレータを使用すると、Pythonで書いてもCで書いてもリストを使用した同じ 処理よりメモリ効率がよく、高速となります。これはデータをメモリ上に``在庫 ''しておくのではなく、必要に応じて作成する注文生産方式を採用しているため です。

イテレータによるパフォーマンス上のメリットは、要素の数が増えるにつれてよ り明確になります。一定以上の要素を持つリストでは、メモリキャッシュのパフ ォーマンスに対する影響が大きく、実行速度が低下します。

参考資料:

The Standard ML Basis Library, The Standard ML Basis Library.

Haskell, A Purely Functional Language, Definition of Haskell and the Standard Libraries.