合并功能以供以后在地图中使用

Combine functions to later use in map

我有一个项目列表,来自一个类型 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)))

我会在这里使用列表理解而不是 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]
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 将接受可变数量的函数,return 接受单个值的新函数。然后这个值将通过前面提到的每个函数(在链中)传递,直到最终结果是 yield。


示例用法

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