2016-08-10 99 views
0

我有這樣一個定義,它將函數應用於元素列表和函數執行所需的單個附加參數。我如何修改它以應用任意數量的單個參數?例如:將函數應用於列表和多個單參數

電流法:

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

對於工作,我需要一個函數,它有兩個參數。例如:

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) 

這會拋出一個錯誤,即參數不可迭代。

謝謝!

回答

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

當然!我需要在這些lambda上刷一些。謝謝! – konrad