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