Python 组合函数以供以后在地图中使用

Python 组合函数以供以后在地图中使用,python,function,dictionary,map-function,Python,Function,Dictionary,Map Function,我有一个项目列表,来自一个类型为a的对象和一个对类型为B的对象进行操作的库 我想把A转换成B,然后用Python的方式调用B的函数。到目前为止,我的想法是: def convert_A_to_B(A): return B(A.something, A.something_else) def doStuff(a_list): converted_to_b = list(map(convert_A_to_B, a_list) return list(map(B.functi

我有一个项目列表,来自一个类型为a的对象和一个对类型为B的对象进行操作的库

我想把A转换成B,然后用Python的方式调用B的函数。到目前为止,我的想法是:

def convert_A_to_B(A):
    return B(A.something, A.something_else)

def doStuff(a_list):
    converted_to_b = list(map(convert_A_to_B, a_list)
    return list(map(B.function, converted_to_b))
我可以创建一个lambda来组合这些函数,但我觉得应该有一个更简单的方法。比如:

return list(map(combine(convert_A_to_B, B.function)))

我会使用列表理解而不是
list(map(…)
这里:

return [B(A.something, A.something_else).function() for A in a_list]
您可以对
map()
lambda
执行相同的操作,但上面的内容更具可读性:

return list(map(lambda A: B(A.something, A.something_else).function(), a_list))
如果您想重新使用
已转换为\u b
,只需执行以下操作:

return [converted_to_b(A).function() for A in a_list]
该功能可用,例如
combine(A.foo,A.bar)(x)
with相当于
A.bar(A.foo(x))

combine
将接受可变数量的函数,并返回一个接受单个值的新函数。然后,该值将通过前面提到的每个函数(链中)传递,直到得到最终结果


样本使用
为什么要调用
map()
上的
list()
,以将
转换为
?这在这里是完全多余的。你是对的,我需要最后一次转换,考虑什么是
combine()
?我在2.7、3.3、3.5文档中找不到它。联合收割机是我正在寻找的功能,我也找不到它。它获取一个函数列表并创建一个新的函数,该函数调用每个函数,并将结果作为参数传递给下一个函数。请将此详细信息添加到您的帖子中。:)我仍然需要把convert_A_to_B放在一个很小的例子中,实际函数有点longer@BartlomiejLewandowski:对,然后在列表理解中使用它,而不是
B(…)
表达式。您的代码似乎有错误,我收到了可以使用星号表达式作为作业目标我已经编辑了你的答案,删除了upacking,没有它就可以了
from functools import partial, reduce
combine = lambda *xs: partial (reduce, lambda v,x: x(v), xs)
map (combine (convert_A_to_B, B.function), a_list)