如何在python中使用eval分配变量的值?

Fox*_*son 67 python

好的.所以我的问题很简单:如何在Python中使用eval分配变量的值?我试过了,eval('x = 1')但那不行.它返回一个SyntaxError.为什么这不起作用?

ken*_*ytm 104

因为x=1是陈述,而不是表达.使用exec运行语句.

>>> exec('x=1')
>>> x
1
Run Code Online (Sandbox Code Playgroud)

顺便说一句,有很多方法可以避免使用exec/ eval如果你需要的是一个动态名称来分配,例如你可以使用字典,setattr函数,或者locals()字典:

>>> locals()['y'] = 1
>>> y
1
Run Code Online (Sandbox Code Playgroud)

更新:尽管上面的代码在REPL中有效,但它在函数内部不起作用.如果不可能,请参阅在Python中修改本地区域以获取其他选项exec.

  • 顺便说一句,如果你想改变这样的变量,你可能需要一本字典. (6认同)
  • Python文档说你不应该修改`locals()`.(http://docs.python.org/2/library/functions.html#locals)有没有另一种方法可以使用赋值而没有`eval()`的完整邪恶? (4认同)

Raf*_*ler 10

你不能,因为变量赋值是一个语句,而不是一个表达式,并且eval只能eval表达式.请exec改用.

更好的是,不要使用它们并告诉我们你真正想要做什么,以便我们能够提出一个安全和理智的解决方案.