python - 使用 vars() 不好吗

标签 python variables

我有一个字符串表达式需要对其进行评估。该表达式可能具有来自给定字典的键名称,这些键的值可能是也可能不是字符串。为了让我的 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})

谢谢!!

最佳答案

有一个更好的方法来完成您想要做的事情:可选的 globalslocals eval 的参数.

def test(e1, d1):
    return eval(e1, globals(), d1)

与您的代码做同样的事情,但不需要处理 vars .如果您可以将空字典作为第二个参数而不是 globals() 传递,这将使您免受 e1 的副作用.

关于python - 使用 vars() 不好吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6711749/

相关文章:

python - Django:防止编辑/删除对象的更干的方法?

python - 在 python 2.7 中翻译字符串

python - 使用Python和请求抓取网页时的字符集问题

python - 如何使用 pandas DataFrame 计算列表字典?

javascript - 将 JSON 数组转换为单独的 JS 变量

javascript - 我如何漂亮地打印 javascript 对象/变量?

python - 动态图像处理服务

variables - ExtJS 4.2 - 动态加载日期选择器值 - 新手 Q

javascript - 基于屏幕宽度的 div 宽度(中间有固定的 div)

java - C++/Java递归变量初始化