[python-de] Frage

lannert at lannert.rz.uni-duesseldorf.de lannert at lannert.rz.uni-duesseldorf.de
Fri Dec 18 09:22:35 EST 1998


"Klaus-J. Wolf" wrote:
Status: RO

> 
> Hallo,
> 
> ich habe mal eine Frage, ich hoffe das ärgert Euch nicht, wo ich Eure
> Geduld doch schon so sehr mit den Fragen des Warum-Typs strapaziert
> habe.
> 
> Ich habe hier ein Tupel, das eine Funktion enthält.
> Lasse ich sie anzeigen, bekomme ich
> (<function soundso at 8b900>,...).
> 
> Sowohl `...` als auch pprint.pprint(...) werfen mir genau das aus.
> 
> Das ist aber nun wirklich wertlos, wenn ich das wieder einlese, habe
> ich kaputt. Auch `soundso` und pprint.pprint(soundso) hilft mir nicht
> weiter, was kann ich machen? Ich möchte die Funktion selbst, als
> Definition irgendwo stehen haben.

Wenn die Funktion einmal in den internen Bytecode übersetzt ist, kriegt
man sie [AFAIK...] schlecht wieder zurück. Wenn's Dir auf die lesbare
Form sehr ankommt, könntest Du sie eventuell als String speichern und
eval benutzen.

> 
> 
> Gleiches Problem, anders:
> 
> Ich habe:
> 
> b = lambda x,y: 1
> a = lambda x,y: (x and x*y+b(x-1,y)) or 1
> b = a
> 
> ... und a(999,333) gibt es mir mit hilfe von Funktion b (letztere) aus.
> Ich möchte aber, daß die Funktion a die Funktion b benutzt, die zu dem
> Zeitpunkt der Definition Gültigkeit hatte. Wie mache ich das? (Hinweis:
> b ist eine Schleifenvariable)

Versuch' mal:

b = lambda x,y: 1
a = lambda x,y, f=b: (x and x*y+f(x-1,y)) or 1
b = a

Dann kommt 332668 raus.
Die Defaultwerte der lambda-Parameter werden zum Zeitpunkt der Definition
ausgewertet. Dadurch erhält man so 'ne Art Closures.

  Detlef



__________________________________________________
Python-de Liste  -  python-de at starship.skyport.net
http://starship.skyport.net/mailman/listinfo/python-de



More information about the Python-de mailing list