[Python-de] Wie iteriert man am sinnvollsten mehrfach über Iteratorklassen

Hans-Peter Jansen hpj at urpla.net
Mit Aug 3 18:25:28 CEST 2005


Hi,

ich habe eine Klasse, auf der ich gerne mit Iteratoren hantieren würde, 
vermisse beim Studium von PEP 234 http://python.org/peps/pep-0234.html
aber irgendwie einen Hinweis, wie man diese dann sinnvoll zurücksetzt, 
wenn man sich daran hält, den StopInteration Status bei zu behalten, 
aber mehrfach über die Klasse iterieren will.

Beispiel:

class IterTest:
    def __init__(self):
        self.data = range(5)
        self.curr = 0
        
    def __iter__(self):
        return self
        
    def next(self):
        if self.curr < len(self.data):
            ret = self.data[self.curr]
            self.curr += 1
            return ret
        else:
            #self.reset()
            raise StopIteration

    def reset(self):
        self.curr = 0

it = IterTest()
for i in it:
    print i

it.reset()

for i in it:
    print i

Ist das so gedacht? Wenn man it.reset() weglässt, klappt das zweite 
iterieren nicht. Alternativ könnte man ja auch self.reset() innerhalb
der Klasse aufrufen, wie im Kommentar angedeutet, was meiner Ansicht 
nach auch eleganter wäre, aber in oben benannten PEP wird ohne Angabe 
von Gründen davon abgeraten. Warum?

Weiss jemand, ob's dazu schon 'ne best procedure gibt?

Pete