如果输入函数是多参数函数,我将如何调用此函数:
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语法问题。
答案 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 )