[Python-de] lazy evaluation mit yield
Matthias Urlichs
smurf at noris.de
Fri Apr 19 15:32:49 EDT 2002
Hi,
Mark Zoeltsch:
> def xmap(funktion, *sequenz):
> _maxe = max(map(len,sequenz))#maximale Elemente
Sorry, aber dadurch hast du den Effekt des Ganzen, nämlich sämtliche
Sequenzen genau einmal "lazy" zu evaluieren, zerstört.
Zumal nicht alle Sequenzen überhaupt eine definierte Länge haben...
denk nur mal an die Zeilen einer Textdatei.
Du musst das schon so machen (vorsicht -- einigermassen ungetestet):
def xmap(funktion, *sequenz):
seq=[]
for s in sequenz:
seq.append(iter(s))
while 1:
args=[]
ok=0;
for arg in seq:
try:
args.append(arg.next())
ok += 1
except StopIteration:
args.append(None)
if not ok:
raise StopIteration
yield funktion(*args)
> jedenfalls verhielt sich diese xmap jetzt in allen meinen Tests wie die
> built-in map, bin aber weiterhin fuer jede Kritik offen wenn ich was
> uebersehen hab :)
>
s.o.
--
Matthias Urlichs | noris network AG | http://smurf.noris.de/
More information about the Python-de
mailing list