Skip to main content
 首页 » 编程设计

python之合并功能以供以后在 map 中使用

2024年08月25日29birdshome

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

请您参考如下方法:

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 将接受可变数量的函数,并返回一个接受单个值的新函数。然后,该值将通过前面提到的每个函数(在链中)传递,直到最终结果为 yield。


示例用法

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