def compose(*funcs):
"""Compose arbitrarily many functions, evaluated left to right.
Reference: https://mathieularose.com/function-composition-in-python/
"""
# return lambda x: reduce(lambda v, f: f(v), funcs, x)
if funcs:
return reduce(lambda f, g: lambda *a, **kw: g(f(*a, **kw)), funcs)
else:
raise ValueError('Composition of empty sequence not supported.')
上述代码中 return reduce()部分执行思路,原理
----------------------------------------------------------------------------
rom functools import reduce
def add(x):
x = x+1
return x
def mut(x):
x = 2 ** x
return x
print(reduce(lambda f, g: lambda *a, **kw: g(f(*a, **kw)),[add,mut,add,mut])(1))
print(reduce(lambda f, g: lambda *a, **kw: f(g(*a, **kw)),[add,mut,add,mut])(1))函数是如何执行的