[Python-de] Bei der Instantiierung einer Funktion Code ausführen

Diez B. Roggisch deets at web.de
Sa Dez 8 16:35:35 CET 2012


Ich glaube dem OP geht's weniger um exec. Sondern darum, ob Funktionsdefinitionen weitere Seiteneffekte haben können, die zur ausführung von Code führen. 

Ich denke nicht - mit der Ausnahme von Dekoratoren natürlich. 

Diez

Mobile Mail. Excuse brevity. 


Am 08.12.2012 um 11:35 schrieb Mike Müller <mmueller at python-academy.de>:

> Hallo Albert,
> 
> Am 08.12.12 10:40, schrieb Albert Hermeling:
>> Guten Morgen,
>> 
>> ich Beschäftige mich gerade mit mit den Internas von Python Funktionen. Beim
>> Nachdenken über Funktionen, habe ich mich gefragt, ob man Code beim erzeugen
>> einer Funktion unbemerkt ausführen kann. Klinkt jetzt ein bisschen verworren,
>> deshalb hier ein Beispiel:
>> 
>> s = """
>> def printer():
>>    print("Böse Funktion: ", dir())
>> """
>> 
>> Diese Funktion liegt als String vor und wenn ich jetzt aus dem String mit exec
>> eine Funktion erzeuge (Instantiiere (?)) habe ich eine Funktion printer im
>> aktuellen Namensraum. So lange ich diese Funktion nicht aufrufe, passiert
>> nichts, rufe ich Sie auf passiert was. Ist es jetzt eigentlich möglich, das bei
>> der Erzeugung (exec(s) genau jetzt), also noch vor dem Aufrufen der selbigen,
>> Schadcode ausgeführt werden kann?
> 
> Die Funktion wird erst beim Aufruf ausgeführt. Kannst aber garantieren, dass
> nicht auch außerhalb der Funktion Anweisungen kommen? Zum Beispiel:
> 
> s = """
> print('haha')
> def printer():
>     print("Böse Funktion: ", dir())
> """
> 
> Generell würde ich `exec` nur in sehr seltenen Fällen nehmen. Es gibt fast
> immer eine andere, oft bessere, Lösung. Kannst du mal kurz erklären warum
> die Funktion als String vorliegt und was genau passieren soll. Dann bietet
> sich vielleicht eine andere Lösung an.
> 
> Viele Grüße
> Mike
> 
> _______________________________________________
> python-de maillist  -  python-de at python.org
> http://mail.python.org/mailman/listinfo/python-de
> 


Mehr Informationen über die Mailingliste python-de