In Ordnung. Meine Frage ist also einfach: Wie kann ich den Wert einer Variablen mit eval in Python zuweisen? Ich habe es versucht, eval('x = 1')
aber das wird nicht funktionieren. Es gibt einen SyntaxError zurück. Warum funktioniert das nicht?
76
Antworten:
Weil
x=1
es eine Aussage ist, kein Ausdruck. Verwenden Sieexec
diese Option , um Anweisungen auszuführen.>>> exec('x=1') >>> x 1
Übrigens gibt es viele Möglichkeiten, die Verwendung von
exec
/ zu vermeiden,eval
wenn Sie lediglich einen dynamischen Namen zum Zuweisen benötigen, z. B. ein Wörterbuch, diesetattr
Funktion ,oder das::locals()
Wörterbuch>>> locals()['y'] = 1 >>> y 1
Update : Obwohl der obige Code in der REPL funktioniert, funktioniert er nicht in einer Funktion. Unter Ändern von Einheimischen in Python finden Sie einige Alternativen, wenn dies
exec
nicht in Frage kommt.quelle
locals()
. ( docs.python.org/2/library/functions.html#locals ) Gibt es eine andere Möglichkeit, die Zuweisung nur ohne das volle Übel von zu verwendeneval()
?Sie können nicht, da die Variablenzuweisung eine Anweisung ist, kein Ausdruck und
eval
nureval
Ausdrücke. Verwenden Sieexec
stattdessen.Besser noch, verwenden Sie es auch nicht und sagen Sie uns, was Sie wirklich versuchen, damit wir eine sichere und vernünftige Lösung finden können.
quelle
Es funktioniert ... weil Python tatsächlich assignNewValueToX ausführt, um den Ausdruck auswerten zu können. Es kann weiterentwickelt werden, aber ich bin sicher, dass es für fast alle Bedürfnisse eine bessere Option gibt.
quelle
Sie können tatsächlich einen
exec()
Befehl eingebeneval()
Ihre Aussage würde also so aussehen
eval("exec('x = 1')")
ps das ist gefährlich
quelle