Verständnisfrage zu Iteratoren und Generatoren
Verfasst: Sonntag 30. November 2008, 11:35
Hallo habe nicht genau den Unterschied zwischen
Generatoren und iteratoren verstanden.
Bin Neueinsteiger in Python.
Meiner Meinung nach ist das eine oder andere doch überflüssig.
z.B.
kann ich einen Generator in einen Iterator packen,
aber was soll mir das denn bringen, dafür
ist doch eigentlich der Iterator gedacht.
Siehe folgendes Listing:
Und die Behauptung ein Generator gibt einen Iterator zurück,
frage ich mich wofür habe ich denn dann den Generator ??
Wenn ich alles mit dem Iterator programmieren kann ?
umgekehrt wird ja gesagt das ein Generator einen
Iterator zurückgibt.
Dann wäre da noch die Sache mit den Iteratoren selbst.
Was genau bewirkt die Funktion __iter__(self)
bei einem Iterator ?
So wie ich verstanden habe ist diese Funktion dafür
zuständig das der Iterator mit einem definierten Zustand
anfängt zu iterieren, ähnlich wie die __init__(self) Funktion
bei den Klassen.
Aber wenn dies so wäre mit der __iter__(self) Funktion
dann frage ich mich warum ich mir die next() Funtktion
sparen kann bei folgendem Listing ?
Denn hier packe ich wieder einen Generator in die
Iterator-Funktion __iter__(self)
Irgendwie finde ich das Zusammenspiel verwirrend ?
Vielen Dank für eure Hilfe
Generatoren und iteratoren verstanden.
Bin Neueinsteiger in Python.
Meiner Meinung nach ist das eine oder andere doch überflüssig.
z.B.
kann ich einen Generator in einen Iterator packen,
aber was soll mir das denn bringen, dafür
ist doch eigentlich der Iterator gedacht.
Siehe folgendes Listing:
Code: Alles auswählen
class Fibonacci2(object):
def __init__(self, max_n):
self.MaxN = max_n
def __iter__(self):
n = 0
a, b = 0, 1
for n in xrange(self.MaxN):
a, b = b, a + b
yield a
frage ich mich wofür habe ich denn dann den Generator ??
Wenn ich alles mit dem Iterator programmieren kann ?
umgekehrt wird ja gesagt das ein Generator einen
Iterator zurückgibt.
Dann wäre da noch die Sache mit den Iteratoren selbst.
Was genau bewirkt die Funktion __iter__(self)
bei einem Iterator ?
So wie ich verstanden habe ist diese Funktion dafür
zuständig das der Iterator mit einem definierten Zustand
anfängt zu iterieren, ähnlich wie die __init__(self) Funktion
bei den Klassen.
Aber wenn dies so wäre mit der __iter__(self) Funktion
dann frage ich mich warum ich mir die next() Funtktion
sparen kann bei folgendem Listing ?
Denn hier packe ich wieder einen Generator in die
Iterator-Funktion __iter__(self)
Code: Alles auswählen
def __iter__(self):
n = 0
a, b = 0, 1
for n in xrange(self.MaxN):
a, b = b, a + b
yield a
Vielen Dank für eure Hilfe