2013-06-15 2 views
13

Я хочу получить результат цепочки вычислений от начального значения. Я на самом деле, используя следующий код:Вычислить цепочку функций в python

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

С каждой функции в function_list имея один аргумент.

Я хотел бы узнать, есть ли аналогичная функция в стандартной библиотеке python или лучший способ (например: использование lambdas) для этого.

+3

Это была бы сфера функционального приложения в стиле FP. Например. в Haskell 'foldr ($) 7 [(+1), (^ 3), (* 2)]' оценивается как '2745'. '($)' просто '\ f x -> f x'. Таким образом, 'reduce' и' lambda' будут эквивалентом python. –

+3

Ваш код ясен и краток - я бы сказал, что нет причин попробовать и сжать его. –

+0

@DonStewart: на самом деле это свод функциональной композиции. –

ответ

18

Сложите во время звонка.

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

Обратите внимание, что в 3.x 'reduce' является' functools.reduce() '. –

+2

Мне нужно было перевернуть переменные в лямбда: 'destination = reduce ((lambda x, y: y (x)), function_list, origin)'. Теперь это работает. – rob

+1

Вы действительно считаете, что это лучший способ сделать это? –

Смежные вопросы