Подтвердить что ты не робот

Как назначить значение переменной с помощью eval в python?

Хорошо. Поэтому мой вопрос прост: как я могу присвоить значение переменной с помощью eval в Python? Я пробовал eval('x = 1'), но это не сработает. Он возвращает SyntaxError. Почему это не будет работать?

4b9b3361

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