Alternative to eval in Python

2020-03-24 05:07发布

问题:

Python eval is quite slow. I need to evaluate simple boolean expression with logical operators (like "True or False"). I am doing this for thousands of line of data and eval is a huge bottleneck in terms of performance. It's really slow.. Any alternative approaches?

I tried creating a dict of possible expression combinations and their expected output, but this is really ugly!

I have the following code at the moment:

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

回答1:

import operator
ops = { 'or': operator.or_, 'and': operator.and_ }
print ops[op](True, False)


回答2:

It's not clear to me how @CatPlusPlus's solution will evaluate any boolean expression. Here is an example from the pyparsing wiki examples page of a Boolean expression parser/evaluator. Here are the test cases for this script:

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'


标签: python eval