2015-02-23 83 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