合并函数以便以后在地图

时间:2015-10-03 08:32:45

标签: python function dictionary map-function

我有一个项目列表,来自一个A类型的对象,以及一个对B类对象进行操作的库。

我想将A转换为B,然后以pythonic方式调用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)))

2 个答案:

答案 0 :(得分:2)

from functools import partial, reduce
combine = lambda *xs: partial (reduce, lambda v,x: x(v), xs)

该函数可用,例如combine (A.foo, A.bar) (x),相当于A.bar(A.foo (x))

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

样本用法

map (combine (convert_A_to_B, B.function), a_list)

答案 1 :(得分:1)

我在这里使用列表理解而不是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))

如果您想重新使用converted_to_b,请执行以下操作:

return [converted_to_b(A).function() for A in a_list]