2016-03-21 5 views
-1

私はfunc_listという関数のリストを持っています。Pythonで関数のリストを再帰的に呼び出しますか?

私はそれらを1つずつ実行したいので、func_list[index]の実行結果をfunc_list[index + 1]の引数として渡さなければなりません。

私はこのコードを思い付いた:

def func(arg, index): 
    while index < 10: 
     res = func_list[index](arg) 
     res = func(res, index+1) 
    return res 

は、同じことを達成するための任意のより良い方法はありますか?

+1

はい。 'for'ループを使います。 –

答えて

2

これはfunctools.reduceが対象です。

from functools import reduce 

reduce(lambda a,b: b(a), func_list, FIRST_ARG) 

これは

func_list[n](func_list[n-1](... func_list[0](FIRST_ARG) ...)) 

functools.reduce二つの引数をとり(第三任意選択)を実行します。最初の引数は値を返すバイナリ関数で、2番目の引数はバイナリ関数に渡す値の繰り返し可能なもので、オプションの3番目はそのリストの前に置かれる値です(最初の引数バイナリ関数)。

前の関数呼び出しの結果は、次の関数呼び出しにa、次の要素にはbと表示されます。したがって、lambda a,b: b(a)は、前の結果を次の関数の引数として呼び出します。

+0

ありがとう!!!!!! – HJC

関連する問題