Python eval
非常慢。我需要用邏輯運算符來評估簡單的布爾表達式(比如「True or False」)。我正在爲數千行數據做這件事,並且在性能方面eval
是一個巨大的瓶頸。這真的很慢..任何替代方法?替代Python中的eval
我試着創建一個dict
可能的表達組合和他們的預期輸出,但這真的很醜!
我有下面的代碼的那一刻:
eval('%s %s %s' % (True, operator, False))
Python eval
非常慢。我需要用邏輯運算符來評估簡單的布爾表達式(比如「True or False」)。我正在爲數千行數據做這件事,並且在性能方面eval
是一個巨大的瓶頸。這真的很慢..任何替代方法?替代Python中的eval
我試着創建一個dict
可能的表達組合和他們的預期輸出,但這真的很醜!
我有下面的代碼的那一刻:
eval('%s %s %s' % (True, operator, False))
import operator
ops = { 'or': operator.or_, 'and': operator.and_ }
print ops[op](True, False)
這不是很清楚,我怎麼@ CatPlusPlus的解決方案將評估任何布爾表達式。以下是Boolean expression parser/evaluator的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'
我已經實現了一個解析器,它將複雜表達式轉換爲簡單的布爾表達式(運算符,括號等的優先級)。在一天結束時,我只需要評估「True or False」等內容,這就是爲什麼上述解決方案適用於我的原因! – user955632
你究竟在做什麼?在99%的案例中,使用eval的人確實不需要它,如果沒有它,情況會好得多。我很確定你在這個組裏。 –
好吧,我只需要評估數千行的布爾表達式。正如你所說,我確實屬於99%的類別。下面的解決方案是驚人的! – user955632