Python中eval的替代方案
Python中的eval
函数速度比较慢。我需要评估一些简单的布尔表达式,比如“True or False”。我有成千上万行数据要处理,而eval
在性能上成了一个大问题,真的很慢……有没有其他的办法呢?
我试过创建一个dict
,把可能的表达式组合和它们的预期输出列出来,但这样做真的很麻烦!
我现在有以下代码:
eval('%s %s %s' % (True, operator, False))
2 个回答
1
我不太明白 @CatPlusPlus 的解决方案是如何评估任何布尔表达式的。这里有一个来自 pyparsing 维基页面的例子,展示了一个 布尔表达式解析器/评估器。以下是这个脚本的测试案例:
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'
14
import operator
ops = { 'or': operator.or_, 'and': operator.and_ }
print ops[op](True, False)
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。