В целом, вложенные функции, как вы делали выше, являются наиболее простым и читаемым способом составления функций в Python.
Если вы составляете множество функций, то может стоить написать функцию compose
.
def compose(*funcs):
if len(funcs) == 1:
return funcs[0]
else:
def composition(*args, **kwargs):
return funcs[0](compose(*funcs[1:])(*args, **kwargs))
return composition
Или, если вы предпочитаете итеративное, а не рекурсивное решение:
def compose_pair(f1, f2):
def composition(*args, **kwargs):
return f1(f2(*args, **kwargs))
return composition
def compose_iterative(*funcs):
iterfuncs = iter(funcs)
comp = next(iterfuncs)
for f in iterfuncs:
comp = compose_pair(comp, f)
return comp