【问题标题】:multiple args function call in map(lambda) function in pythonpython中map(lambda)函数中的多个args函数调用
【发布时间】:2015-02-21 20:28:15
【问题描述】:

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

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

所以如果 someFunction 是像这样的单个输入函数,我可以称之为newList = process_list(someFunction, inputList)

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

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

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

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

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

【问题讨论】:

  • 假设crv 的值来自列表,那么_lineStyle 的值来自哪里?不知道这一点,你的答案就无法正确回答。
  • 它们可能来自另一个列表,或者在这种情况下是单个对象
  • 这是否意味着我需要将它添加到 process_list 函数? process_list(_func, _list, _funcArg)

标签: python function syntax lambda


【解决方案1】:

如果_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 )

【讨论】:

  • 是的,你能给我看一个 zip 版本的例子吗?
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 2020-03-29
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
相关资源
最近更新 更多