【问题标题】:What does Positional-only parameters do in Python 3.8? [duplicate]仅位置参数在 Python 3.8 中的作用是什么? [复制]
【发布时间】:2023-04-08 07:31:01
【问题描述】:

下面的python代码是做什么的?

def pow(x, y, z=None, /):
    r = x**y
    if z is not None:
        r %= z
    return r

【问题讨论】:

  • 你试过运行它吗?
  • 您可以阅读PEP 570 以获得完整描述,但本质上/ 之前的参数不能通过名称传递(例如,您不能使用pow(x=1, y=2)pow(y=2, z=3, x=1)),而是它们必须按照签名指定的顺序按位置传递。
  • 它与早期版本中的普通函数做同样的事情。它只是阻止您以不同的顺序调用带有参数的函数。

标签: python python-3.x pep570


【解决方案1】:

它已经在 Python 3.8 的官方文档中的 Positional-only parameters 中定义。

有新语法 (/) 表示某些函数参数必须按位置指定(即,不能用作关键字参数)。这与用 C 实现的函数的 help() 显示的符号相同(由 Larry Hastings 的“Argument Clinic”工具生成)。示例:

现在 pow(2, 10) 和 pow(2, 10, 17) 是有效的调用,但是 pow(x=2, y=10) 和 pow(2, 10, z=17) 是无效的。

完整说明请参见PEP 570

【讨论】:

    【解决方案2】:

    在调用函数时,不能使用关键字参数指定仅位置参数的值。 pow(1, 2, 3) 会起作用; pow(x=1, y=2, z=3) 不会。

    【讨论】:

      【解决方案3】:

      PEP-0570 中有很好的描述。如果禁止对标记为仅位置的参数使用命名参数:

      >>> pow(x=5, y=3)
      Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
      TypeError: pow() takes no keyword arguments
      

      你只能叫它pow(5, 3)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-24
        • 2020-04-02
        • 2019-02-25
        • 2021-08-29
        • 1970-01-01
        • 1970-01-01
        • 2016-02-20
        相关资源
        最近更新 更多