【问题标题】:Make an Argument Optional in Python [duplicate]在Python中使参数可选[重复]
【发布时间】:2015-06-18 19:15:59
【问题描述】:

我在 CAD 程序中使用 GUI 框制作脚本,用户在视口中选择了大约 7 个不同的表面。然后,当用户点击“确定”时,我将这些值传递给另一个函数

传递给它的函数如下所示

def MeshingTools(od_idSurf, trgSurf, PipeBodySurf, sealSurf, threadSurf, BodySurf, cplgEndSurf):

问题是:如果用户不需要选择其中一个表面,我会收到一条错误消息,MeshingTools() 正好采用 7 个非关键字参数(给定 2 个)

我该如何解决这个问题?

更新:

我尝试了关键字参数,但没有完全得到我需要的。

def MeshingTools(**kwargs): print kwargs

当我只选择 1 个表面时,我会得到以下结果

{'PipeBodySurf': (mdb.models['FullCAL4'].rootAssembly.instances['PinNew-1'].edges[151], mdb.models['FullCAL4'].rootAssembly.instances['PinNew-1'].edges[153])}

如果我尝试打印 PipeBodySurf ,它会说未定义全局名称。

有什么想法吗?

最终更新(已解决)

现在我看到**kwargs 创建了一个字典,因此您必须使用kwargs['parameter'] ,而不是在其余代码中仅使用参数名称,然后它将使用值

【问题讨论】:

  • 如何将值传递给函数?
  • 您是否尝试过将问题的标题粘贴到 Google 搜索中?
  • TigerhawkT3,是的,但我只能找到可以覆盖值的位置,而不是我想要的
  • 如果关键字参数不能满足您的需求,您需要告诉我们您尝试过哪些以及您不喜欢它们的哪些方面。
  • 我向您保证,这些信息很容易获得。如果您不希望代码覆盖值,请不要告诉它。通过查看official Python tutorial,您可能会得到很好的服务。

标签: python arguments


【解决方案1】:

您可以使用* 操作传递任意参数:

def MeshingTools(*args):
  for i in args:
      #do stuff with i  

函数可以使用以一个或两个* 字符开头的特殊参数来收集任意数量的额外参数。 (* 用于位置参数,** 用于关键字参数)

【讨论】:

  • 人们应该在不发表评论的情况下投反对票而失去 100 分。为什么投反对票?!
  • 答案相当简单。如果不是首选,则应提及关键字参数。
  • @JohnKugelman 是的,你是对的,刚刚添加!
  • @ChrisHawkes 谢谢,我也应该提到关键字参数。
猜你喜欢
  • 2014-08-03
  • 1970-01-01
  • 2018-10-28
  • 2017-01-17
  • 1970-01-01
  • 2010-12-16
  • 2021-10-20
  • 2012-06-17
  • 2018-06-13
相关资源
最近更新 更多