Python中eval的替代方案
PythonPython中eval的替代方案,python,eval,Python,Eval,Pythoneval相当慢。我需要用逻辑运算符(如“True或False”)计算简单的布尔表达式。我这样做是为了处理数千行数据,eval是性能方面的一个巨大瓶颈。真的很慢。。有其他办法吗 我试图创建一个包含可能的表达式组合及其预期输出的dict,但这真的很难看 我目前有以下代码: eval('%s %s %s' % (True, operator, False)) 我不清楚@CatPlusPlus的解决方案将如何计算任何布尔表达式。下面是一个来自的pyparsing wiki示例页面的示例。以
eval
相当慢。我需要用逻辑运算符(如“True或False”)计算简单的布尔表达式。我这样做是为了处理数千行数据,eval
是性能方面的一个巨大瓶颈。真的很慢。。有其他办法吗
我试图创建一个包含可能的表达式组合及其预期输出的dict
,但这真的很难看
我目前有以下代码:
eval('%s %s %s' % (True, operator, False))
我不清楚@CatPlusPlus的解决方案将如何计算任何布尔表达式。下面是一个来自的pyparsing wiki示例页面的示例。以下是此脚本的测试用例:
p = True
q = False
r = True
test = ["p and not q",
"not not p",
"not(p and q)",
"q or not p and r",
"q or not (p and r)",
"p or q or r",
"p or q or r and False",
]
for t in test:
res = boolExpr.parseString(t)[0]
print t,'\n', res, '=', bool(res),'\n'
你到底在干什么?在99%的情况下,使用eval的人实际上并不需要它,如果没有它,情况会好得多。我很确定你在这个组。我只需要计算数千行的布尔表达式。正如你所说,我属于99%的类别。下面的解决方案是惊人的!我已经实现了一个解析器,它将复杂表达式转换为简单的布尔表达式(运算符、括号等的优先级)。在一天结束时,我只需要评估像“真或假”之类的东西,所以这就是为什么上面的解决方案对我有效!
p = True
q = False
r = True
test = ["p and not q",
"not not p",
"not(p and q)",
"q or not p and r",
"q or not (p and r)",
"p or q or r",
"p or q or r and False",
]
for t in test:
res = boolExpr.parseString(t)[0]
print t,'\n', res, '=', bool(res),'\n'