Python eval
非常慢。我需要用逻辑运算符(如“True或False”)来评估简单的布尔表达式。我正在为数千行数据执行此操作,而eval
在性能方面是一个巨大的瓶颈。它真的很慢..任何替代方法?
我尝试创建dict
可能的表达式组合及其预期输出,但这真的很难看!
目前我有以下代码:
eval('%s %s %s' % (True, operator, False))
答案 0 :(得分:13)
import operator
ops = { 'or': operator.or_, 'and': operator.and_ }
print ops[op](True, False)
答案 1 :(得分:1)
我不清楚@ CatPlusPlus的解决方案将如何评估任何布尔表达式。以下是Boolean expression parser/evaluator的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'