Хорошо. Поэтому мой вопрос прост: как я могу присвоить значение переменной с помощью eval в Python? Я пробовал eval('x = 1')
, но это не сработает. Он возвращает SyntaxError. Почему это не будет работать?
Как назначить значение переменной с помощью eval в python?
Ответ 1
Потому что x=1
- это выражение, а не выражение. Используйте exec
для запуска операторов.
>>> exec('x=1')
>>> x
1
Кстати, существует много способов избежать использования exec
/eval
, если все, что вам нужно, - это динамическое имя для назначения, например. вы можете использовать словарь setattr
function, или locals()
словарь:
>>> locals()['y'] = 1
>>> y
1
Обновление. Хотя приведенный выше код работает в REPL, он не будет работать внутри функции. См. Изменение локалей в Python для некоторых альтернатив, если exec
не может быть и речи.
Ответ 2
Вы не можете, так как назначение переменной - это оператор, а не выражение, а eval
могут только выражения eval
. Вместо этого используйте exec
.
Еще лучше, не используйте и не сообщайте нам, что вы на самом деле пытаетесь сделать, чтобы мы могли придумать безопасное и разумное решение.
Ответ 3
x = 0 def assignNewValueToX(v): global x x = v eval('assignNewValueToX(1)') print(x)
Это работает... потому что python фактически выполнит назначениеNewValueToX, чтобы иметь возможность оценить выражение. Его можно развивать дальше, но я уверен, что есть лучший вариант для почти любых потребностей, которые могут быть у вас.