2016-08-10 7 views
0

関数の実行に必要な要素のリストと1つの追加の引数に関数を適用するこの定義があります。任意の数の単一の引数を適用するように変更するにはどうすればよいですか?例:リストと複数の単一の引数に関数を適用する

現在の方法:そのため

def ProcessListArg(_func, _list, _arg): 
    return map(lambda x: ProcessListArg(_func, x, _arg) if type(x)==list else _func(x, _arg), _list) 

私は2つの引数を取る関数を必要とする仕事に。例:

def SomeFunction(arg1, arg2): 
    return something 

私はそうのようにそれを適用する:

​​

私はそうのような複数の単一の引数を利用するためにProcessListArgを変更したい:

def SomeFunction2(arg1, arg2, arg3): 
    return something 

その後、私はそれを適用しますように:

output = ProcessListArgs(SomeFunction2, inputArg1List, inputArg2, inputArg3) 

私はこれを試しました:

def ProcessListArgs(_func, _list, *args): 
    return map(lambda *xs: ProcessListArgs(_func *xs) if all(type(x) is list for x in xs) else _func(*xs), *args) 

これは、引数がiterableではないというエラーをスローします。

ありがとうございます!

答えて

1

私はこれがあなたの望むことを信じています。

def SomeFunction(arg1, arg2): 
    print "SomeFunction", arg1, arg2 


def SomeFunction2(arg1, arg2, arg3): 
    print "SomeFunction", arg1, arg2, arg3 


def ProcessListArg(_func, _list, *_arg): 
    return map(lambda x: ProcessListArg(_func, x, *_arg) 
       if type(x) == list else _func(x, *_arg), 
       _list) 


ProcessListArg(SomeFunction, [1, 2, [2.1, 2.2, 2.3], 3], 4) 
ProcessListArg(SomeFunction2, [1, 2, [2.1, 2.2, 2.3], 3], 4, 5) 
+0

もちろんです!私はそれらのラムダでいくつかを磨く必要があります。ありがとうございました! – konrad

関連する問題