【发布时间】:2011-04-08 18:26:13
【问题描述】:
好的。所以我的问题很简单:如何在 Python 中使用 eval 分配变量的值?我试过eval('x = 1') 但这不起作用。它返回一个语法错误。为什么这不起作用?
【问题讨论】:
-
你想做什么?无论你在做什么,都不应该使用 eval。
-
不同意,eval 有很多用途
标签: python
好的。所以我的问题很简单:如何在 Python 中使用 eval 分配变量的值?我试过eval('x = 1') 但这不起作用。它返回一个语法错误。为什么这不起作用?
【问题讨论】:
标签: python
因为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 以获取一些替代方案。
【讨论】:
locals()。 (docs.python.org/2/library/functions.html#locals) 有没有另一种方法可以使用赋值,而没有eval() 的全部邪恶?
你不能,因为变量赋值是一个语句,而不是一个表达式,而eval 只能是eval 表达式。请改用exec。
更好的是,不要使用其中任何一种,并告诉我们您真正想要做什么,以便我们能够提出一个安全而理智的解决方案。
【讨论】:
它有效...因为 python 将实际运行 assignNewValueToX 来评估表达式。它可以进一步开发,但我相信有一个更好的选择可以满足几乎任何人的需求。
【讨论】:
您实际上可以将exec() 命令放在eval() 中
所以你的声明看起来像eval("exec('x = 1')")
附言这很危险
【讨论】: