[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