Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中eval的替代方案_Python_Eval - Fatal编程技术网

Python中eval的替代方案

Python中eval的替代方案,python,eval,Python,Eval,Pythoneval相当慢。我需要用逻辑运算符(如“True或False”)计算简单的布尔表达式。我这样做是为了处理数千行数据,eval是性能方面的一个巨大瓶颈。真的很慢。。有其他办法吗 我试图创建一个包含可能的表达式组合及其预期输出的dict,但这真的很难看 我目前有以下代码: eval('%s %s %s' % (True, operator, False)) 我不清楚@CatPlusPlus的解决方案将如何计算任何布尔表达式。下面是一个来自的pyparsing wiki示例页面的示例。以

Python
eval
相当慢。我需要用逻辑运算符(如“True或False”)计算简单的布尔表达式。我这样做是为了处理数千行数据,
eval
是性能方面的一个巨大瓶颈。真的很慢。。有其他办法吗

我试图创建一个包含可能的表达式组合及其预期输出的
dict
,但这真的很难看

我目前有以下代码:

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

我不清楚@CatPlusPlus的解决方案将如何计算任何布尔表达式。下面是一个来自的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'

你到底在干什么?在99%的情况下,使用eval的人实际上并不需要它,如果没有它,情况会好得多。我很确定你在这个组。我只需要计算数千行的布尔表达式。正如你所说,我属于99%的类别。下面的解决方案是惊人的!我已经实现了一个解析器,它将复杂表达式转换为简单的布尔表达式(运算符、括号等的优先级)。在一天结束时,我只需要评估像“真或假”之类的东西,所以这就是为什么上面的解决方案对我有效!
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'