2015-02-23 70 views
1

假设我们有一个具有接受该类的另一个实例的实例方法的类,然后返回该类的新实例。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 

...但它已经有可能是一个标准库函数,这样做,随即发生在我身上?

回答

4

这是减少! (我是在写这个问题的中间时,我发现它:/)

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

应用的两个参数功能累积到的迭代, 项目由左到右,从而减少可迭代到单个值。例如,reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])计算 ((((1+2)+3)+4)+5)

+2

您可能会喜欢[学习像Haskell这样的函数式编程语言](http://learnyouahaskell.com/)。 Reduce,map和friends是Python恰好支持的功能性结构。起初很难,但一旦你了解了范例,你会发现很多这样的巧妙的东西,你可以做。 – 2015-02-23 20:32:28