Python 函数定义中只有正斜杠吗? [复制]

2024-03-20

In the Python 3.8 编程常见问题解答 https://docs.python.org/3.8/faq/programming.html#how-do-i-write-a-function-with-output-parameters-call-by-reference,我看到了下面的函数定义:

class callByRef:
    def __init__(self, /, **args):
        for key, value in args.items():
            setattr(self, key, value)

缺少此内容Python 3.7 版本 https://docs.python.org/3.7/faq/programming.html#how-do-i-write-a-function-with-output-parameters-call-by-reference:

class callByRef:
    def __init__(self, **args):
        for (key, value) in args.items():
            setattr(self, key, value)

这是什么新东西/ syntax?

它与一个有什么关系/出现在help() output?


Note: this https://stackoverflow.com/q/24735311/5353461 and this https://stackoverflow.com/questions/28243832/what-is-the-meaning-of-a-forward-slash-in-a-python-method-signature-as-show问题是关于help() 注解,而这个问题是关于新语法以及与help()注解。


语法介绍

The /因为语法是Python 3.8 中引入 https://docs.python.org/3.8/whatsnew/3.8.html#positional-only-parameters.

理由/在参数列表中给出PEP 570 -- Python 仅位置参数 https://www.python.org/dev/peps/pep-0570/:

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

之前,(参考资料)PEP 457 https://www.python.org/dev/peps/pep-0457/定义了语法,但范围更加模糊。该 PEP 通过证明语法合理性并提供了实现,使原始提案更进一步/函数定义中的语法。

语法和注释 PEP 的比较

相似之处

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

差异

  • PEP 570 -- Python Positional-Only Parameters

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

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

解释和例子

关于其含义和用法已经有很好的答案/在争论中 https://stackoverflow.com/q/24735311/5353461.

为了节省您的点击次数:

A /意味着所有参数是仅位置参数。 a 之前的仅限位置参数/ cannot被传递为name=value调用函数时。

Python 3.8 新增内容 https://docs.python.org/3.8/whatsnew/3.8.html给出以下示例:

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

Valid函数调用:

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

Invalid函数调用:

  • pow(x=2, y=10)
  • pow(2, 10, z=17)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 函数定义中只有正斜杠吗? [复制] 的相关文章

随机推荐