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?
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?
Antworten:
Weil x=1es eine Aussage ist, kein Ausdruck. Verwenden Sie execdiese Option , um Anweisungen auszuführen.
>>> exec('x=1')
>>> x
1
Übrigens gibt es viele Möglichkeiten, die Verwendung von exec/ zu vermeiden, evalwenn Sie lediglich einen dynamischen Namen zum Zuweisen benötigen, z. B. ein Wörterbuch, die setattrFunktion ,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 execnicht in Frage kommt.
locals(). ( docs.python.org/2/library/functions.html#locals ) Gibt es eine andere Möglichkeit, die Zuweisung nur ohne das volle Übel von zu verwenden eval()?
Sie können nicht, da die Variablenzuweisung eine Anweisung ist, kein Ausdruck und evalnur evalAusdrücke. Verwenden Sie execstattdessen.
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.
x = 0
def assignNewValueToX (v):
global x
x = v
eval ('assignNewValueToX (1)')
print (x)
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.