[Python-de] generatoren unverstaendnis
Gerhard Häring
gh at ghaering.de
Mit Jul 2 00:56:37 EDT 2003
robertj wrote:
> hi,
>
> irgendwie muss ich beim gebrauch von generatoren und iteratoren
> noch ein problem haben. vieleicht kann mich einer erhellen
>
> folgende kleiner beispielcode -
>
> from __future__ import generators
>
> class Liste:
> def __init__(self, *_values):
> self.Values = _values
> self.Index = -1
> def __iter__(self):
> self.Index = -1
> return self
> def next(self):
> self.Index += 1
> if len(self.Values) > self.Index:
> return self.Values[self.Index]
> raise StopIteration()
> def next(self):
> for value in self.Values:
> yield value
>
>
> if __name__ == "__main__":
> for x in Liste("Eins", "zwei", "drei"):
> print x
>
>
> das beispiel laeuft mit der ersten next-methode
> ohne probleme durch. mit der zweiten bekomme ich
> eine endlos "schleife" - kapiere bloss nicht warum? [...]
Du mischt Generatoren und Iteratoren. Da kommt natürlich nur Käse raus ;-)
Das erste next gehört zu einer Iterator-Klasse, die passt auch so.
Wenn du einen Generator machen willst, wird der komplett in einem
Callable implementiert - im Normalfall mit einem def-Statement, aber es
geht auch so etwas wie:
#v+
class MyGen:
def __init__(self, values):
self.values = values
def __call__(self):
for v in self.values:
yield v
mygen = MyGen([3, 4, 5])
for item in mygen():
print item
#v-
HTH,
-- Gerhard