我有一个问题,我有一堆需要很长时间才能执行的函数,每个函数都返回一个布尔值True/False。我将一个巨大的布尔表达式应用于所有函数以获得总体True/False分数。目前我的代码不是基于函数的,所以所有的函数都被执行,然后应用大的布尔表达式。我已经知道让它们的功能可以允许短循环的子表达式来防止某些函数调用。我现在需要的是一种重新排列表达式的方法,使得我有最少的通话次数。如何重新排序布尔逻辑以更快地短路?
考虑下面的代码(可怕的代码示例,但你应该明白我的意思):
def q():
print "q"
return False
def r():
print "r"
return False
def s():
print "s"
return False
def a():
print "a"
return False
def b():
print "b"
return False
def c():
print "c"
return False
def d():
print "d"
return False
def i():
print "i"
return False
def j():
print "j"
return False
(q() or r() or s()) and (a() and b() and c() and (i() or j()))
在这种情况下,你见问答[R印出来。全都是假的,所以它短路。在这种情况下,应该首先评估b或c,因为如果其中任何一个为False,则整个表达式为False。假设最后的表达式是由用户生成的,所以我无法对最佳可能顺序进行硬编码。我在想,我错过了一个非常简单的算法。其他
两件事情:
1)如果我允许其他逻辑,例如“不”? 2.)我可以根据运行需要多长时间来分配每个函数,然后计算它吗?