好。所以我的问题很简单:如何在Python中使用eval分配变量的值?我试过了eval('x = 1')
,但那不行。它返回一个SyntaxError。为什么这不起作用?
答案 0 :(得分:94)
因为x=1
是一个语句,而不是表达式。使用exec
运行语句。
>>> exec('x=1')
>>> x
1
顺便说一句,如果你需要的是一个动态名称,有很多方法可以避免使用exec
/ eval
,例如你可以使用字典,setattr
function,或:locals()
dictionary
>>> locals()['y'] = 1
>>> y
1
更新:虽然上面的代码在REPL中有效,但它在函数内部不起作用。如果exec
不可能,请参阅Modifying locals in Python了解一些替代方案。
答案 1 :(得分:10)
你不能,因为变量赋值是一个语句,而不是一个表达式,而eval
只能是eval
个表达式。请改用exec
。
更好的是,不要使用它们并告诉我们你真正尝试做什么我们可以提出一个安全和理智的解决方案。
答案 2 :(得分:0)
x = 0 def assignNewValueToX(v): global x x = v eval('assignNewValueToX(1)') print(x)
它有效......因为python实际上会运行assignNewValueToX来评估表达式。它可以进一步发展,但我相信几乎任何可能的需求都有更好的选择。
答案 3 :(得分:0)
您实际上可以将exec()
命令放在eval()
内
所以您的陈述看起来像eval("exec('x = 1')")
p.s。这很危险