Kann jemand erklären, wie die __next__
mit dem Code unten funktioniert? Ich weiß, dass "nächste" für Iteratoren verwendet wird, um das nächste Element eines iterierbaren Objekts zu übernehmen, normalerweise mit next()
.Iterables/generators Erklärung
Ich weiß, dass der __iter__
Teil ausgeführt wird wegen list()
Aufruf, der __next__
ausführt. Aber __next__
weiter ausführt, fast wie eine Weile Schleife? Bis die StopIteration ausgeführt wird?
Auch, wo werden alle 'Return'-Elemente unter __next__
gespeichert? Wird alles nur im Speicher gespeichert, bis return self
unter __iter__
es an die aufrufende Funktion zurückgibt?
class FRange(object):
def __init__(self, start, stop=None, step=None):
if stop is None:
self.i = 0
self.stop = start
self.step = 1
elif step is None:
self.i = start
self.stop = stop
self.step = 1
else:
self.i = start
self.stop = stop
self.step = step
def __iter__(self):
return self
def __next__(self):
if self.i < self.stop and self.step > 0:
self.i += self.step
return self.i - self.step
elif self.i > self.stop and self.step < 0:
self.i += self.step
return self.i - self.step
else:
raise StopIteration
def rangeFloat(args):
return list(FRange(*args))
Der Code erzeugt oben für Beispiel:
For args = [-1.1, 2.4, 0.3], the output is
rangeFloat(args) = [-1.1, -0.8, -0.5, -0.2, 0.1, 0.4, 0.7, 1, 1.3, 1.6, 1.9, 2.2].
sollte nächste (iter) nächste (Iterator) sein? – user1179317
@ user1179317: In der Tat sollte es. – user2357112