【问题标题】:python positional argumentspython位置参数
【发布时间】:2017-11-20 11:49:40
【问题描述】:

我试图了解这个function 的参数是如何被解释的:

def f(a, *, b):
   return a, b

看起来这个function 强制调用者调用f() 正好有2 个参数,第二个参数应该始终是一个命名的b= 参数。我如何从function 签名中破译这个?为什么它不允许我为 * 指定中间参数?

【问题讨论】:

    标签: python function positional-parameter


    【解决方案1】:

    * 单独是 Python3 专用的方式来表示以下参数是命名参数,并且只能传递给函数。

    From the documentation:

    *”或“*identifier”之后的参数是关键字参数,只能传递使用过的关键字参数。

    【讨论】:

      【解决方案2】:

      如何从函数签名中破译这个?

      1. 必须传递没有默认值的参数。
      2. * 之后的参数如果要传递,则必须通过关键字传递。
      3. 除非参数名称伴随*,否则不能传递额外的参数来“填充”*

      由于b 没有默认值,它必须被传递。因为它在* 之后,所以它必须通过关键字传递。由于* 是“裸”的(即,它只是* 占位符,而不是像*args 这样的可变参数),因此不能将其他位置参数作为“中间”参数传递。

      请参阅 PEP 3102 以获取有关仅关键字参数语法的说明。

      【讨论】:

      • 很好的解释,比官方文档理解的还好。
      猜你喜欢
      • 2016-07-24
      • 2017-01-03
      • 2015-06-19
      • 1970-01-01
      • 2016-01-08
      • 2018-09-06
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      相关资源
      最近更新 更多