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