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()输出中有什么关系?
注意:this和this question 是关于help() annotation,而 this question 是关于新语法和help()注释的任何差异。
Tom*_*ale 12
将/作为语法是在Python 3.8推出。
/参数列表中的基本原理在PEP 570 -- Python Positional-Only Parameters 中给出:
新语法将使库作者能够进一步控制如何调用他们的 API。它将允许指定哪些参数必须作为仅位置调用,同时防止它们作为关键字参数调用。
以前,(信息性)PEP 457定义了语法,但范围更加模糊。此 PEP 通过证明语法的合理性并为
/函数定义中的语法提供实现,使原始提案更进了一步。
相似之处
出于所有意图和目的,如果您理解help()的/表示法,那么这就是通过 PEP 570 在 v3.8 中作为 Python 语法正式包含的内容。
差异
PEP 570 -- Python Positional-Only Parameters
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 次 |
| 最近记录: |