如何将嵌套函数作为参数传递

Yur*_*kee 1 python nested function

让我们说我们在python中有函数:

def _abs(iterable):   #cause its normally for one element only
    return [abs(i) for i in iterable]

def A(list, foo):
    return foo(list)

list = [2,3,-5]
print( A(list,foo=sum) )

>> 0
Run Code Online (Sandbox Code Playgroud)

虽然我可能会foo=sum转到A,但我正在寻找一种优雅的方式来传递类似foo=sum(_abs)表演的东西sum(_abs(list)).

我现在看到它的唯一方法是发送一个函数列表[sum, _abs]并按顺序应用它们.有没有更好的办法?

jon*_*rpe 5

或者,更一般地组成(即具有任意数量的参数函数):

from functools import partial, reduce

def compose(*funcs):
    return partial(reduce, lambda x, f: f(x), reversed(funcs))
Run Code Online (Sandbox Code Playgroud)

(请参阅文档partialreduce- 请注意,您不需要reduce在Python 2.x中导入)

然后:

>>> compose(sum, _abs)([2, 3, -5])
10
Run Code Online (Sandbox Code Playgroud)