Leeren Generator zurückgeben (forced).
Verfasst: Dienstag 2. September 2014, 16:50
Hi all,
vermutlich ist dies nur ne dumme Frage, aber leider komm ich nicht ohne weiteres von selbst drauf, nur durch Doku lesen...
Folgendes Szenario:
Nur zum Spaß habe ich versucht, die range() builtin-Funktion selbst in Python zu implementieren und bin darauf auf ein (praktisch irrelevantes) Problem gestoßen.
Ihr seht, ich teile hier auf zwischen myrange() und myrange_gen(), wobei die _gen() Version nur das Generator-Objekt zurückgeben soll,
für den seltenen Fall, dass es vielleicht so gewünscht / bevorzugt wäre, ansonsten ruft man die richtige Version auf, die einem eine fertige Liste zurückgibt.
Ausserdem seht Ihr noch, dass für bestimmte Fälle eine leere Liste zurückgegeben wird. (Die ganzen return [] Zeilen)
Dumme Frage jetzt: angenommen, ich will, dass meine _gen() Funktion aus kosmetischen Gründen (praktisch tut es auch so) IMMER einen Generator zurückgibt,
wie mache ich, dass nen "leeren" Generator zurückgibt? Irgendwie steh ich hier aufm Schlauch, weil ich komm selbst nicht drauf.
Bin wie immer dankbar für eure Antworten und Kommentare.
vermutlich ist dies nur ne dumme Frage, aber leider komm ich nicht ohne weiteres von selbst drauf, nur durch Doku lesen...
Folgendes Szenario:
Nur zum Spaß habe ich versucht, die range() builtin-Funktion selbst in Python zu implementieren und bin darauf auf ein (praktisch irrelevantes) Problem gestoßen.
Code: Alles auswählen
def myrange_gen(stop,start=None,step=None):
if start is None:
start = 0
else:
# [start,] stop [, step]
start, stop = stop, start
if step is None:
step = 1
if start is stop:
return []
if step == 0:
return []
if start < stop and step < 0:
return []
if start > stop and step > 0:
return []
def inner_myrange_gen(stop,start,step):
if start < stop:
while start < stop:
yield start
start += step
else:
while start > stop:
yield start
start += step
return inner_myrange_gen(stop,start,step)
def myrange(stop,start=None,step=None):
return list(myrange_gen(stop,start,step))
für den seltenen Fall, dass es vielleicht so gewünscht / bevorzugt wäre, ansonsten ruft man die richtige Version auf, die einem eine fertige Liste zurückgibt.
Ausserdem seht Ihr noch, dass für bestimmte Fälle eine leere Liste zurückgegeben wird. (Die ganzen return [] Zeilen)
Dumme Frage jetzt: angenommen, ich will, dass meine _gen() Funktion aus kosmetischen Gründen (praktisch tut es auch so) IMMER einen Generator zurückgibt,
wie mache ich, dass nen "leeren" Generator zurückgibt? Irgendwie steh ich hier aufm Schlauch, weil ich komm selbst nicht drauf.
Bin wie immer dankbar für eure Antworten und Kommentare.