Python中eval的替代方案

5 投票
2 回答
4755 浏览
提问于 2025-04-17 04:56

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)

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

撰写回答