Python eval
非常慢。我需要用逻辑运算符来评估简单的布尔表达式(比如“True or False”)。我正在为数千行数据做这件事,并且在性能方面eval
是一个巨大的瓶颈。这真的很慢..任何替代方法?替代Python中的eval
我试着创建一个dict
可能的表达组合和他们的预期输出,但这真的很丑!
我有下面的代码的那一刻:
eval('%s %s %s' % (True, operator, False))
Python eval
非常慢。我需要用逻辑运算符来评估简单的布尔表达式(比如“True or False”)。我正在为数千行数据做这件事,并且在性能方面eval
是一个巨大的瓶颈。这真的很慢..任何替代方法?替代Python中的eval
我试着创建一个dict
可能的表达组合和他们的预期输出,但这真的很丑!
我有下面的代码的那一刻:
eval('%s %s %s' % (True, operator, False))
import operator
ops = { 'or': operator.or_, 'and': operator.and_ }
print ops[op](True, False)
这不是很清楚,我怎么@ 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'
我已经实现了一个解析器,它将复杂表达式转换为简单的布尔表达式(运算符,括号等的优先级)。在一天结束时,我只需要评估“True or False”等内容,这就是为什么上述解决方案适用于我的原因! – user955632
你究竟在做什么?在99%的案例中,使用eval的人确实不需要它,如果没有它,情况会好得多。我很确定你在这个组里。 –
好吧,我只需要评估数千行的布尔表达式。正如你所说,我确实属于99%的类别。下面的解决方案是惊人的! – user955632