Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Alternative to eval in Python

Tags:

python

eval

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))
like image 320
user955632 Avatar asked Oct 24 '11 23:10

user955632


2 Answers

import operator
ops = { 'or': operator.or_, 'and': operator.and_ }
print ops[op](True, False)
like image 134
Cat Plus Plus Avatar answered Sep 28 '22 23:09

Cat Plus Plus


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'
like image 34
PaulMcG Avatar answered Sep 29 '22 00:09

PaulMcG