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


76

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


1
你想做什么?无论您做什么,都不应使用eval。
babsher 2011年

1
不同意,评估有很多用途
约书亚

Answers:


118

因为x=1是语句,而不是表达式。使用exec运行语句。

>>> exec('x=1')
>>> x
1

顺便说一句,如果您只需要分配动态名称,则有很多方法可以避免使用exec/ eval,例如,您可以使用字典,setattr函数locals()字典

>>> locals()['y'] = 1
>>> y
1

更新:尽管上面的代码在REPL中可以使用,但在函数内部不起作用。如果没有其他问题,请参见在Python中修改本地变量exec


6
顺便说一句,如果您想更改这样的变量,则可能需要字典。
Ned Batchelder

下次我做这样的事情时可能会使用字典。
Fox Wilson

4
Python文档说您不应该修改locals()。(docs.python.org/2/library/functions.html#locals)是否有另一种方法来使用赋值而又不会完全破坏eval()
詹森·S

14

您不能,因为变量分配是语句,不是表达式,eval只能是eval表达式。使用exec代替。

更好的是,不要使用任何一种,并且不要告诉我们您真正想做的事情,以便我们提出安全可靠的解决方案。


0
x = 0
def AssignNewValueToX(v):
    全球x
    x = v

eval('assignNewValueToX(1)')
打印(x)

它的工作原理是... python实际上会运行assignNewValueToX来计算表达式。它可以进一步开发,但是我确信对于几乎任何需求,都有更好的选择。


差不多了,但是我需要动态分配变量名。不过谢谢
福克斯·威尔逊

0

您实际上可以将exec()命令放入其中eval()

所以你的陈述看起来像 eval("exec('x = 1')")

ps这很危险

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.