[python-de] Frage

Martin von Loewis martin at mira.isdn.cs.tu-berlin.de
Fri Dec 18 09:52:17 EST 1998


Status: RO

> (<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?

Du möchtest, daß eval an dieser Stelle wieder die Funktion einträgt?
Siehe, die Funktion hat einen Namen

def foo(self): pass

val = "("+foo.__name__+",)"

print val
print eval(val)

Geht natürlich nur, wenn der String im gleichen Modul wieder evaluiert
wird. Wenn das nicht der Fall ist, hilft

val = "(cPickle.loads("+`cPickle.dumps(foo)`+"),)"

Setzt beim evaluieren voraus, daß cPickle importiert ist(*). Setzt
außerdem voraus, daß die Funktion beim evaluieren definiert ist. Wenn
das nicht der Fall ist, kann man mit marshal.dumps einen String aus
foo.func_code erzeugen, aus dem beim Evaluieren wieder ein Code-Objekt
wird. Dummerweise kann man mit marshal keine Funktionen
dumpen. Deshalb müßte man beim evaluieren die Funktion mit
new.function erzeugen lassen.

Ciao,
Martin

(*) Wenn man sowieso pickelt, kann man auch das ganze Objekt pickeln.



__________________________________________________
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