我有这个定义,它将函数应用于元素列表和函数执行所需的单个附加参数。如何修改它以应用任意数量的单个参数?例如:
目前的方法:
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
我会这样申请:
output = ProcessListArg(SomeFunction, inputArg1List, inputArg2)
我想修改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)
抛出一个参数不可迭代的错误。
谢谢!
答案 0 :(得分: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)