2013-04-30 9 views
11

客観的な定義はありますか?それはPythonのソースコードの断片として実装されていますか?もしそうなら、誰かが正確なコード行を生成できますか?すべての言語を、例えば 'for'ステートメントイテレータプロトコルと一緒に使っているのでしょうか?Pythonの反復子プロトコルは正確に何ですか?

+1

http://docs.python.org/3/reference/compound_stmts.html#the-for-statement –

+1

ほとんどの言語は、Pythonのようなステートメントを実装していません(これは実際には「foreach」として最もよく記述されています)。 for(init、cond、incr)のC標準の 'は、Pythonのforループのようなものではありません。 –

答えて

17

は、それは、ドキュメント内hereあります:

container.__iter__()

戻りイテレータオブジェクト:コンテナオブジェクトは、反復サポートを提供するため

一つの方法を定義する必要があります。このオブジェクトは、後述のイテレータプロトコルをサポートする必要があります。コンテナが異なるタイプの反復をサポートしている場合は、それらの反復タイプの反復子を具体的に要求する追加のメソッドを提供することができます。 (繰り返しの複数のフォームをサポートするオブジェクトの例は、幅優先と深さ優先の両方をサポートするツリー構造です)。このメソッドは、Python/C APIのPythonオブジェクトの型構造のtp_iterスロットに対応します。

反復子自体が一緒イテレータプロトコルを形成する以下の2つのメソッドをサポートするために必要とされているオブジェクト:

iterator.__iter__()

戻りイテレータオブジェクト自体。これは、コンテナとイテレータの両方をfor文とin文で使用できるようにするために必要です。このメソッドは、Python/C APIのPythonオブジェクトのタイプ構造のtp_iterスロットに対応しています。

iterator.next()

戻るコンテナから次の項目。それ以上アイテムがない場合は、StopIteration例外を発生させます。このメソッドは、Python/C APIのPythonオブジェクトの型構造のtp_iternextスロットに対応しています。

+7

また、py3の 'next'は' __next__'です – Kos

+2

例を追加すると私は投票します。 ;-) – polarise

関連する問題