2013-06-15 12 views
13

Voglio ottenere il risultato di una catena di calcoli da un valore iniziale. In realtà sto usando il seguente codice:Calcolo di una catena di funzioni in python

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

Con ogni funzione in function_list avere un unico argomento.

Mi piacerebbe sapere se esiste una funzione simile nella libreria standard Python o in un modo migliore (esempio: utilizzo di lambda) per fare ciò.

+3

Questa sarebbe una piega di applicazione di funzione, in uno stile FP. Per esempio. in Haskell 'foldr ($) 7 [(+1), (^ 3), (* 2)]' valuta come '2745'. '($)' è semplicemente '\ f x -> f x'. Quindi 'reduce' e' lambda' sarebbero l'equivalente python. –

+3

Il tuo codice è chiaro e conciso - direi che non c'è motivo di provare a comprimerlo. –

+0

@DonStewart: in realtà è una piega della composizione delle funzioni. –

risposta

18

Piegare mentre si chiama.

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

Nota che in 3.x, 'reduce' è' functools.reduce() '. –

+2

Avevo bisogno di invertire le variabili nel lambda: 'destination = reduce ((lambda x, y: y (x)), function_list, origin)'. Ora funziona. – rob

+1

Credi davvero che questo sia un modo * migliore * per farlo? –

Problemi correlati