2013-04-30 12 views
11

Gibt es eine objektive Definition? Ist es als ein Fragment von Pythons Quellcode implementiert? Wenn ja, könnte jemand die genauen Codezeilen erzeugen? Haben Sie alle Sprachen mit, sagen wir, eigenen 'Iterator-Protokollen?Was genau ist das Iteratorprotokoll von Python?

+1

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

+1

Die meisten Sprachen implementieren keine Python-ähnlichen Anweisungen (die am besten als "foreach" beschrieben werden). Der C-Standard 'for (init, cond, incr)' ist nichts wie Pythons for-Schleife. –

Antwort

17

es sich befindet here in der Dokumentation:

Eine Methode muss definiert werden, für Containerobjekte Iteration unterstützen:

container.__iter__()

Return ein Iterator-Objekt. Das Objekt muss das unten beschriebene Iteratorprotokoll unterstützen. Wenn ein Container verschiedene Arten von Iterationen unterstützt, können zusätzliche Methoden bereitgestellt werden, um Iteratoren für diese Iterationstypen spezifisch anzufordern. (Ein Beispiel für ein Objekt, das mehrere Formen der Iteration unterstützt, wäre eine Baumstruktur, die sowohl die erste Breite als auch die erste Tiefe unterstützt.) Diese Methode entspricht dem Slot tp_iter der Typstruktur für Python-Objekte in der Python/C-API.

Der Iterator-Objekte selbst erforderlich sind, um die folgenden zwei Verfahren zu unterstützen, die zusammen das Iterator-Protokoll bilden:

iterator.__iter__()

Return der Iterator-Objekt selbst. Dies ist erforderlich, damit sowohl Container als auch Iteratoren mit den For- und In-Anweisungen verwendet werden können. Diese Methode entspricht dem Slot tp_iter der Typstruktur für Python-Objekte in der Python/C-API.

iterator.next()

Return das nächste Element aus dem Container. Wenn keine weiteren Elemente vorhanden sind, heben Sie die StopIteration-Ausnahme an. Diese Methode entspricht dem Slot tp_iternext der Typstruktur für Python-Objekte in der Python/C-API.

+7

Auch 'next' ist' __next__' in py3 – Kos

+2

Wenn Sie ein Beispiel hinzufügen, werde ich abstimmen. ;-) – polarise