【发布时间】:2017-05-03 15:45:55
【问题描述】:
假设我们在 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
虽然我可以将foo=sum 传递给A,但我正在寻找一种优雅的方式来传递foo=sum(_abs) 之类的东西来执行sum(_abs(list))。
我现在看到的唯一方法是发送函数列表[sum, _abs] 并按顺序应用它们。有没有更好的办法?
【问题讨论】:
-
你问的是函数composition(而不是嵌套)stackoverflow.com/questions/16739290/…
-
你描述的是“函数组合”。如果您想做这种函数式编程,请考虑使用专用于该目的的库:toolz.readthedocs.io/en/latest/…。或者试试
foo=lambda l: sum(map(abs, l))。 -
附带说明,通常建议返回生成器而不是列表,对于您的
_abs,它将是:return (abs(i) for in iterable) -
@jonrsharpe 这是一个很好的解决方案,正是我一直在寻找的。 MarkusMeskanen 为什么会这样?
-
@MarkusMeskanen 或
map(abs, iterable)如果他们使用的是 3.x。