Python中的链接方法

时间:2015-02-23 20:29:11

标签: python

我们假设我们有一个类,它有一个实例方法接受该类的另一个实例,然后返回该类的新实例。

这种类的一个例子是整数。它有__mul__方法,它接受另一个整数并返回一个整数,这是两个数字的乘积。

这就是问题所在。我有一个实现像__mul__这样的方法的类。我有一个这个类的实例列表,我想将前一个对象的上述方法应用到它之前的对象,然后获取结果并将其应用于它之前的那个,等等,直到我们处理完毕整个清单,并有自己的一个对象。

具体示例如下所示。想象一下,我们有一个对象列表......

my_objs = [do, re, me, fa, so, la, te, do]

......想象他们有"结合"方法,遵循上面概述的模式,我们想要应用我概述的程序。你可能会想到这样......

my_objs_together = do.combine(re.combine(me.combine(fa.combine(so.combine(la.combine(te.combine(do)))))))

显然,这很粗糙。这让我想写一个像这样的通用函数......

def together(list_of_objects, method_name):
    combined = list_of_objects[0]
    for obj in list_of_objects[1:]:
        combined = getattr(combined, method_name)(obj)
    return combined

...但我觉得可能已经有了标准的库函数,对吗?

1 个答案:

答案 0 :(得分:4)

它减少了! (当我发现问题时,我正在写这个问题:/)

https://docs.python.org/2/library/functions.html#reduce

  

将两个参数的函数累加到iterable的项中,   从左到右,以便将迭代减少到单个值。   例如,reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])计算   ((((1+2)+3)+4)+5)