在下面的函数定义中,*和/说明了什么?
def func(self, param1, param2, /, param3, *, param4, param5):
print(param1, param2, param3, param4, param5)
NOTE: Not to mistake with the single|double asterisks in *args | **kwargs (100)
在下面的函数定义中,*和/说明了什么?
def func(self, param1, param2, /, param3, *, param4, param5):
print(param1, param2, param3, param4, param5)
NOTE: Not to mistake with the single|double asterisks in *args | **kwargs (100)
有一个new function parameter syntax /
指示某些函数参数必须按位置指定,不能用作关键字参数.[103]
文档详细说明了positional-only parameters的一些用例/优点
它允许纯Python函数完全模拟
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(obj='hello') # The "obj" keyw或d argument impairs readability
将参数标记为仅位置参数的另一个好处是
def quantiles(dist, /, *, n=4, method='exclusive') ...
其中as *
用于强制caller to use named arguments.This is命名参数的用例之一.
因此,根据这种方法,
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)
比如,
param1
, param2
must be specified positionally.param3
can be called either with positional 或 keyw或d.param4
and param5
must be called with keyw或d argument.演示:
>>> 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
... )