built_in compile und Funktionen/Klassen/Module

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
hiasl
User
Beiträge: 31
Registriert: Donnerstag 20. April 2006, 13:36

Hallo,

mit compile kann man Zeichenketten kompilieren und mittels exec/eval ausführen. Meine Frage ist, ob das auch mit Funktionen, Klassen oder Module geht.

Beispiel:
txt = """
def a():
print 1
"""
func = compile(txt, '/tmp/comp.err', 'exec')

Zwar kann ich ein exec(func) oder auch eval(func) ausführen, aber es passiert nichts. ein exec.(func.a()) scheitert.
Wie kann ich Zeichenketten kompilieren ohne sie als Datei speichern und nachträglich importieren zu müssen?

Bin für jeden Tipp dankbar.

Ciao
Matthias
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Code: Alles auswählen

>>> code = compile('''
... def test():
...     return "Hello World"''', 'test.py', 'exec')
>>> d = {}
>>> exec code in d
>>> d['test']()
'Hello World'
"test.py" ist nur ein virtueller dateiname, die wird nicht wirklich angelegt.
TUFKAB – the user formerly known as blackbird
hiasl
User
Beiträge: 31
Registriert: Donnerstag 20. April 2006, 13:36

Besten Dank!
Antworten