[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