2013-06-15 6 views
13

Ich möchte das Ergebnis einer Kette von Berechnungen von einem Anfangswert erhalten. Ich verwende eigentlich den folgenden Code:Berechnen Sie eine Kette von Funktionen in Python

def function_composition(function_list, origin): 
    destination = origin 
    for func in function_list: 
     destination = func(destination) 
    return destination 

Mit jeder Funktion in function_list ein einziges Argument hat.

Ich würde gerne wissen, ob es eine ähnliche Funktion in Python-Standard-Bibliothek oder eine bessere Möglichkeit (Beispiel: Verwendung von Lambdas), dies zu tun ist.

+3

Dies wäre eine Faltung der Funktion Anwendung, in einem FP-Stil. Z.B. in Haskell 'foldr ($) 7 [(+1), (^ 3), (* 2)] ergibt' 2745'. '($)' ist einfach '\ f x -> f x'. Also wäre 'redude' und' lambda' das Python-Äquivalent. –

+3

Ihr Code ist klar und prägnant - ich würde argumentieren, dass es keinen Grund gibt, zu versuchen, es zu komprimieren. –

+0

@DonStewart: eigentlich ist es eine Falte der Funktionszusammensetzung. –

Antwort

18

Falten während des Anrufs.

destination = reduce((lambda x, y: y(x)), function_list, origin) 
+4

Beachten Sie, dass 'reduce' in 3.x' functools.reduce() 'ist. –

+2

Ich musste Variablen im Lambda umkehren: 'Ziel = reduzieren ((Lambda x, y: y (x)), Funktion_Liste, Ursprung)'. Jetzt funktioniert es. – rob

+1

Glaubst du wirklich, dass dies ein * besserer Weg ist, dies zu tun? –

Verwandte Themen