[Python-de] lazy evaluation mit yield
Mark Zoeltsch
zoeltsch at mooniewar.de
Fri Apr 19 14:52:43 EDT 2002
wenns jemanden interessiert...
nach dem ich jetzt ein bischen mich mit dieser
variablen Argumentzahl vertraut gemacht hab,
hab ich mich nochmal an die xmap gesetzt, da ich
gerne eine haette die sich wirklich wie map verhaelt,
aber eben nur 'lazy'
da meine erste Loesung total falsch war, und die Loesung
von P.Norvig sich fuer den Fall:
xmap(lambda *x:x, 'abc', range(2))
anders verhaelt als:
map(lambda *x:x, 'abc', range(2))
(er schrieb ja in den docstring:
stops when any sequence runs out of items)
hab ich das ganze nochmal umgeschrieben:
def xmap(funktion, *sequenz):
"""
for Gerhard ;)
Like map(fn, *seqs), but yields the results one at a time (lazy map).
"""
_maxe = max(map(len,sequenz))#maximale Elemente
sequenz = map(iter,sequenz) #Sequenz ist jetzt eine Liste von Iteratoren
def _tmp(sequenz): #kriegt man sowas in ein lambda gequetscht?
try:
return sequenz.next()
except StopIteration:
return None
while _maxe > 0:
yield funktion(*map(_tmp, sequenz))
_maxe -= 1
else:
del _maxe, _tmp
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 :)
SEE yA
More information about the Python-de
mailing list