Python中eval的替代方案

时间:2011-10-24 23:06:49

标签: python eval

Python eval非常慢。我需要用逻辑运算符(如“True或False”)来评估简单的布尔表达式。我正在为数千行数据执行此操作,而eval在性能方面是一个巨大的瓶颈。它真的很慢..任何替代方法?

我尝试创建dict可能的表达式组合及其预期输出,但这真的很难看!

目前我有以下代码:

eval('%s %s %s' % (True, operator, False))

2 个答案:

答案 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'