将函数应用于列表和多个单个参数

时间:2016-08-10 20:24:42

标签: python

我有这个定义,它将函数应用于元素列表和函数执行所需的单个附加参数。如何修改它以应用任意数量的单个参数?例如:

目前的方法:

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)

抛出一个参数不可迭代的错误。

谢谢!

1 个答案:

答案 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)