Python函数定义中的正斜杠?

Tom*_*ale 7 python arguments parameter-passing

Python 3.8 Programming FAQ 中,我看到了以下函数定义:

class callByRef:
    def __init__(self, /, **args):
        for key, value in args.items():
            setattr(self, key, value)
Run Code Online (Sandbox Code Playgroud)

这在Python 3.7 版本中缺失:

class callByRef:
    def __init__(self, **args):
        for (key, value) in args.items():
            setattr(self, key, value)
Run Code Online (Sandbox Code Playgroud)

这是什么新/语法?

它与/出现在help()输出中有什么关系?


注意:thisthis question 是关于help() annotation,而 this question 是关于新语法和help()注释的任何差异。

Tom*_*ale 12

语法介绍

/作为语法是在Python 3.8推出

/参数列表中的基本原理在PEP 570 -- Python Positional-Only Parameters 中给出

新语法将使库作者能够进一步控制如何调用他们的 API。它将允许指定哪些参数必须作为仅位置调用,同时防止它们作为关键字参数调用。

以前,(信息性)PEP 457定义了语法,但范围更加模糊。此 PEP 通过证明语法的合理性并为/函数定义中的语法提供实现,使原始提案更进了一步。

语法和注释 PEP 的比较

相似之处

出于所有意图和目的,如果您理解help()/表示法,那么这就是通过 PEP 570 在 v3.8 中作为 Python 语法正式包含的内容。

差异

  • PEP 570 -- Python Positional-Only Parameters

    • 定义Python 3.8+的语法
    • 语法的正式语法规范
    • 类型:接受
  • PEP 457 -- Notation For Positional-Only Parameters

    • 定义符号(未语法)中使用help()的注释
    • 非正式英语语言描述
    • 类型:信息

解释和例子

关于/in arguments的含义和用法已经有很好的答案

为了保存您的点击:

A/表示所有前面的参数都是位置参数。/ 不能name=value调用函数一样传递a 之前的仅位置参数。

Python 3.8 What's New给出了以下示例:

def pow(x, y, z=None, /):
    r = x**y
    if z is not None:
        r %= z
    return r
Run Code Online (Sandbox Code Playgroud)

有效的函数调用:

  • pow(2, 10)
  • pow(2, 10, 17)

无效的函数调用:

  • pow(x=2, y=10)
  • pow(2, 10, z=17)


归档时间:

查看次数:

1289 次

最近记录:

6 年,4 月 前