Python はコンテナの内容にわたって反復処理を行う概念をサポートして います。この概念は 2 つの別々のメソッドを使って実装されています; これらのメソッドはユーザ定義のクラスで反復を行えるようにするために 使われます。後に詳しく述べるシーケンス型はすべて反復処理メソッドを サポートしています。
以下はコンテナオブジェクトに反復処理をサポートさせるために定義しなければ ならないメソッドです:
) |
イテレータオブジェクト自体は以下の 2 のメソッドをサポートする必要 があります。これらのメソッドは 2 つ合わせて イテレータプロトコル を成します:
) |
) |
Python では、いくつかのイテレータオブジェクトを定義しています。これらは 一般的および特殊化されたシーケンス型、辞書型、そして他のさらに特殊化 された形式をサポートします。特殊型であることはイテレータプロトコル の実装が特殊になること以外は重要なことではありません。
このプロトコルの趣旨は、 一度イテレータの next() メソッドが StopIteration 例外を送出した場合、以降の呼び出しでもずっと例外を送出しつづける ところにあります。この特性に従わないような実装は変則であると みなされます (この制限は Python 2.3 で追加されました; Python 2.2 では、この規則に従うと多くのイテレータが変則となります)。
Python におけるジェネレータ (generator) は、イテレータプロトコル を実装する簡便な方法を提供します。コンテナオブジェクトの __iter__() メソッドがジェネレータとして実装されて いれば、メソッドは __iter__() および next() メソッドを提供するイテレータオブジェクト (技術的にはジェネレータ オブジェクト) を自動的に返します。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。