2013-06-15 9 views
13

初期値から一連の計算の結果を取得したいと考えています。 function_listの各機能は、単一の引数を持つPythonで一連の関数を計算する

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

:私は実際に次のコードを使用しています。

私はPythonの標準ライブラリやこれを行うための良い方法(例:lambdaを使用して)で同様の機能があるかどうかを知りたいと思います。

+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

これは本当にこれがより良い方法だと思いますか? –