python中的map(lambda)函数中的多个args函数调用

时间:2014-12-23 16:56:44

标签: python function syntax lambda

如果输入函数是多参数函数,我将如何调用此函数:

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

所以我可以调用此newList = process_list(someFunction, inputList)如果someFunction是单个输入函数,如下所示:

def makeRvtDetailLines(crv):
    detailLine = doc.Create.NewDetailCurve(doc.ActiveView, crv)
    return detailLine

但是,如果我需要调用一个具有多个输入ex的函数:

def makeRvtDetailLines(crv, _lineStyle):
    detailLine = doc.Create.NewDetailCurve(doc.ActiveView, crv)
    detailLine.LineStyle = _lineStyle
    return detailLine

如何拨打newList = process_list(makeRvtDetailLines, inputList)?该函数的参数在哪里?谢谢你的帮助。

PS。这不是Revit问题。这是python语法问题。

1 个答案:

答案 0 :(得分:0)

如果_lineStyle是单个对象,则可以使用process_list的(非常)稍微复杂的版本:

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

如果_lineStyle是一个列表,假设它与cdv列表的长度相同,则可以zip将它们组合成一个(cdv,_lineStyle)对的列表,并且然后相应地修改process_list

def process_list(_func, _list, _argList):
    ziplist = zip( _list, _argsList)
    return map( lambda x: process_list(_func, x[0], x[1]) if type(x[0])==list else _func(x[0], x[1]), ziplist )