Представьте себе, что есть функция g
, которую я хочу реализовать путем объединения подфункций.Это может быть легко сделано:
def f1(a):
return a+1
def f2(a):
return a*2
def f3(a):
return a**3
g = lambda x: f1(f2(f3(x)))
Однако, теперь рассмотрим, что, какие подфункции будут связаны вместе, зависит от условий: в частности, от заданных пользователем опций, которые известны заранее.Конечно, можно сделать:
def g(a, cond1, cond2, cond3):
res = a
if cond1:
res = f3(res)
if cond2:
res = f2(res)
if cond3:
res = f1(res)
return res
Однако вместо того, чтобы динамически проверять эти статические условия каждый раз, когда вызывается функция, я предполагаю, что лучше определить функцию g
на основе ее составляющих функций заранее.,К сожалению, следующее дает RuntimeError: maximum recursion depth exceeded
:
g = lambda x: x
if cond1:
g = lambda x: f3(g(x))
if cond2:
g = lambda x: f2(g(x))
if cond3:
g = lambda x: f1(g(x))
Есть ли хороший способ выполнить эту условную цепочку в Python?Обратите внимание, что связываемые функции могут иметь значение N, поэтому нельзя отдельно определять все 2 ^ N комбинаций функций (в данном примере 8).