Angenommen, ich möchte Code auszuführen, zum Beispielexec() Bytecode mit beliebigen Einträgen?
value += 5
in einem Namensraum meiner eigenen (so das Ergebnis ist im Wesentlichen mydict['value'] += 5
). Es gibt eine Funktion exec()
, aber ich habe eine Zeichenfolge übergeben:
exec('value += 5', mydict)
und Aussagen als Strings vorbei scheint seltsam (zum Beispiel ist es nicht koloriert, dass die Art und Weise).
def block():
value += 5
???(block, mydict)
: Kann es wie getan werden? Der offensichtliche Kandidat für die letzte Zeile war exec(block.__code__, mydict)
, aber kein Glück: es wirft UnboundLocalError
über value
. Ich glaube, es führt im Wesentlichen block()
, nicht der Code in Block, so dass Zuweisungen nicht einfach sind - ist das richtig?
Natürlich eine andere mögliche Lösung block.__code__
zerlegen würde ...
FYI, habe ich die Frage wegen this thread. Auch ist der Grund, warum einige (mich unentschlossen) Aufruf für neue Syntax
using mydict:
value += 5
Beachten Sie, wie diese nicht Fehler wirft aber ändert sich nicht mydict
entweder:
def block(value = 0):
value += 5
block(**mydict)
Was mit einfachen Klassendefinitionen falsch? –
Ich bin mir nicht sicher, was Sie mit Klassen meinen. Ich werde versuchen, eine Antwort zu verfassen, die eine mögliche Idee aufzeigt, die du vielleicht meinst, aber fühle mich frei, mich zu korrigieren. –