Хорошо. Поэтому мой вопрос прост: как я могу присвоить значение переменной с помощью 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, чтобы иметь возможность оценить выражение. Его можно развивать дальше, но я уверен, что есть лучший вариант для почти любых потребностей, которые могут быть у вас.