У меня есть проблема, когда у меня есть набор функций, выполнение которых занимает много времени, и каждая из них возвращает логическое значение 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()))
В этом случае вы видите напечатанный qrs.Все Ложь, так что это короткие замыкания.В этом случае, однако, ab или c должны быть оценены первыми, так как, если какой-либо из них является False, все выражение является False.Предположим, что выражение в конце генерируется пользователем так, что я не могу жестко закодировать наилучший возможный порядок.Я думаю, что есть довольно простой алгоритм, который мне не хватает.
Две другие вещи:
1.) Что если я разрешу другую логику, например, "нет"?2.) Могу ли я присвоить каждой функции балл в зависимости от того, сколько времени потребуется для ее запуска, а затем рассчитать это в?