Я не уверен, что будет чище, но я думаю, что это довольно интересное решение.
Прежде всего вы должны определить новую функцию, пусть она будет semi_func
, которая вызовет abc
и some_list.append
сделает код СУХИМ.
Затем установите новую переменную, которая будет действовать как двоичный результат всех логических функций, так что is_func1 это 20-й бит, is_func2 это 19-й и так далее
32 бита целочисленного типа должно быть достаточно для обработки всех 20 результатов.
При установке значения этой переменной результата вы должны использовать сдвиг влево для добавления новых функций:
result = is_func1(param1, param2) << 1
result = (result | is_func2(param1, param2)) << 1
...
result = (result | is_func20(param1, param2))
Для облегчения доступа определите новые константы, такие как
IS_FUNC20_TRUE = 1
IS_FUNC19_TRUE = 2
IS_FUNC18_TRUE = 4
... values should be powers of 2
И в конце используйте оператор switch / sase для вызова semi_func
.