[Python-de] Anwendung von `exec` (war: Re: Bei der Instantiierung einer Funktion Code ausführen)

Stefan Schwarzer sschwarzer at sschwarzer.net
Sa Dez 8 15:18:19 CET 2012


Hallo,

On 2012-12-08 11:35, Mike Müller wrote:
> Generell würde ich `exec` nur in sehr seltenen Fällen nehmen. Es gibt fast
> immer eine andere, oft bessere, Lösung.

das dachte ich auch - und denke ich tendenziell immer noch.
Ich war aber überrascht, als ich neulich im
`collections`-Modul sah, dass für `namedtuple` eine nicht
ganz kleine Klasse mit `exec` erzeugt wird (ab
http://hg.python.org/cpython/file/2.7/Lib/collections.py#l230
beziehungsweise konkret
http://hg.python.org/cpython/file/2.7/Lib/collections.py#l362 .)

Als potenzielle Vorteile von `exec` sehe ich immerhin zum
einen, dass die alternative Erzeugung einer größeren Klasse
mit Inline-Definition(en) und/oder Aufbau eines Dictionaries
für `type` recht unübersichtlich werden kann. Zum anderen
dürfte es bei `exec` einfacher zu kontrollieren sein, was in
welchen Namensräumen landet beziehungsweise als Variante,
was der erzeugte Code noch alles an Referenzen auf seine
Umgebung hält.

Fallen euch Situationen ein, in denen ihr von der Verwendung
von `exec` nicht abraten, sondern sie sogar empfehlen
würdet? Insbesondere würden mich Faustregeln dazu
interessieren, so dass sich diese Fälle leichter auf eigenen
Code übertragen lassen.

Viele Grüße
Stefan


Mehr Informationen über die Mailingliste python-de