Python *(单星)和/(斜线)作为独立参数做什么?
在以下函数定义中,*和/说明了什么Python *(单星)和/(斜线)作为独立参数做什么?,python,python-3.x,function,Python,Python 3.x,Function,在以下函数定义中,*和/说明了什么 def func(self, param1, param2, /, param3, *, param4, param5): print(param1, param2, param3, param4, param5) 注意:为了避免与*args |**kwargs()中的单|双星号错误,如中所述,斜杠仅用于位置参数,如文档所述: 有一个新的函数参数语法/,表示某些函数参数必须按位置指定,不能用作关键字参数。这与使用Larry Hastings工具注释
def func(self, param1, param2, /, param3, *, param4, param5):
print(param1, param2, param3, param4, param5)
注意:为了避免与*args |**kwargs()中的单|双星号错误,如中所述,斜杠仅用于位置参数,如文档所述:
有一个新的函数参数语法/
,表示某些函数参数必须按位置指定,不能用作关键字参数。这与使用Larry Hastings工具注释的C函数的help()
所示的符号相同
对于星号,它在以下文件中提到:
对于具有默认值的参数,可以从调用中省略相应的参数,在这种情况下,将替换该参数的默认值。如果参数具有默认值,则在“*
”之前的所有后续参数都必须具有默认值-这是语法未表达的语法限制
因此,将其称为:
obj.func(10, 20, 30, param4=50, param5=60)
以及:
有一个/
指示某些函数参数必须按位置指定,不能用作关键字参数。[这在Python 3.8
中是新的]
文档指定了
pow()
函数不接受关键字参数:
def pow(x, y, z=None, /):
"Emulate the built in pow() function"
r = x ** y
return r if z is None else r%z
len()
函数
签名len(obj,/)
。这排除了尴尬的呼叫,例如:
len(obj='hello') # The "obj" keyword argument impairs readability
def quantiles(dist, /, *, n=4, method='exclusive')
...
*
用于强制执行。命名参数的用例之一
所以,根据这个方法,
def func(self, param1, param2, /, param3, *, param4, param5):
print(param1, param2, param3, param4, param5)
它一定是用
obj.func(10, 20, 30, param4=50, param5=60)
或
即
param1
,必须指定param2
param3
可以使用或调用param4
和param5
/
是代表,而*
是代表。请参阅:尼斯;你知道重点是什么吗?为什么要这样限制用户自由?@Charanor查看设计和实现此功能的人员考虑的原因。你认为这些理由是否有说服力取决于你;我个人认为这两种方法都可以。/
操作符是否只适用于左参数?你的描述似乎不清楚,但我可能看错了。@GammaGames:是的。参数的顺序始终是仅位置的/
位置的或仅关键字的*
关键字的。
def func(self, param1, param2, /, param3, *, param4, param5):
print(param1, param2, param3, param4, param5)
obj.func(10, 20, 30, param4=50, param5=60)
obj.func(10, 20, param3=30, param4=50, param5=60)
>>> class MyClass(object):
... def func(self, param1, param2, /, param3, *, param4, param5):
... return param1, param2, param3, param4, param5
...
>>> obj = MyClass()
>>>
>>> assert obj.func(10, 20, 30, param4=40, param5=50), obj.func(
... 10, 20, param3=30, param4=40, param5=50
... )