[Python-de] generatoren unverstaendnis
Oliver Horn
oliver.horn at gmx.net
Mit Jul 2 01:43:11 EDT 2003
Hi,
wie Gerhard bereits gesagt hat, stellt deine Liste (mit der ersten
next-Variante) eigentlich keine Liste sondern vielmehr selbst ein
Iterator-Objekt dar.
Iterator-Objekte sind eigentlich nur Hilfsobjekte, die von __iter__
zurückgeliefert werden, um das eigentliche Objekt aufzählbar zu machen.
Die Idee einer Generator-Funktion ist es, dir genau das zu ersparen.
Eine Generator-Funktion liefert von ganz alleine ein Iterator-Objekt
zurück. Mit dem yield-Statement setzt du gewissermaßen jeweils den
nächsten Wert ab.
class Liste:
def __init__(self, *_values):
self.Values = _values
def __iter__(self):
Index = 0
while len(self.Values) > Index:
# Iterator liefert Tupel (Index, Wert) zurück
yield (Index, self.Values[Index])
Index += 1
if __name__ == "__main__":
liste = Liste("Eins", "zwei", "drei").__iter__()
print liste.__iter__() # das Iterator-Objekt der Generator-Funktion
for x in liste:
print x
liefert dir dann so etwas wie:
<generator object at 0x007BB388>
(0, 'Eins')
(1, 'zwei')
(2, 'drei')
Bye
Oliver