我有一个字符串表达式需要对其进行评估。该表达式可能具有来自给定字典的键名称,这些键的值可能是也可能不是字符串。为了让我的 eval 能够评估这些名称,我正在使用该字典中出现的键名称创建变量,并为其分配字典中的值,如下例所示。但是从我读到的here , vars() 不应该被使用。这让我担心我所实现的稳定性和风险。对于如何以更好的方式实现这一点,您有什么想法或建议吗?
def test(e1,d1):
for k,v in d1.iteritems():
if k in e1:
vars()[k]=v
return eval(e1)
test('x+y', {'x':1, 'y':2})
谢谢!!
最佳答案
有一个更好的方法来完成您想要做的事情:可选的 globals
和 locals
eval
的参数.
def test(e1, d1):
return eval(e1, globals(), d1)
与您的代码做同样的事情,但不需要处理 vars
.如果您可以将空字典作为第二个参数而不是 globals()
传递,这将使您免受 e1
的副作用.
关于python - 使用 vars() 不好吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6711749/