如何在Python中使用eval赋值给变量?
好的,我的问题很简单:我怎么能用eval在Python中给一个变量赋值呢?我试过用eval('x = 1')
,但这不行。它返回了一个语法错误(SyntaxError)。为什么这样做不行呢?
5 个回答
2
你可以使用lambda,像这样:
eval('(lambda x=10: x+2)()')
18
你不能这样做,因为变量赋值是一个语句,而不是一个表达式,而 eval
只能处理表达式。你应该使用 exec
。
更好的办法是,干脆别用这两个,告诉我们你真正想要做什么,这样我们才能帮你找到一个安全又合理的解决方案。
165
因为 x=1
是一个语句,而不是一个表达式。如果你想执行语句,可以使用 exec
。
>>> exec('x=1')
>>> x
1
顺便说一下,如果你只是想动态地给一个名字赋值,有很多方法可以避免使用 exec
或 eval
,比如你可以用字典,或者使用 setattr
函数,或者 :locals()
字典
>>> locals()['y'] = 1
>>> y
1
更新:虽然上面的代码在 REPL 中可以运行,但在函数内部就不行了。如果 exec
不适用,可以查看 在 Python 中修改局部变量,那里有一些替代方案。