在下面的函数定义中,*/说明了什么?

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的一些用例/优点

  1. 它允许纯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
    
  2. 另一个用例是当参数

    len(obj='hello')  # The "obj" keyw或d argument impairs readability
    
  3. 将参数标记为仅位置参数的另一个好处是

    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)

比如,

  1. param1, param2 must be specified positionally.
  2. param3 can be called either with positionalkeyw或d.
  3. 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
... )

Python-3.x相关问答推荐

是否可以使用参数对Flask重定向?

循环遍历数据框以提取特定值

Python将类实例变量转换为嵌套 struct

如何强调您正在寻求以 pandas 数据帧的另一列为条件的差异?

匹配语句NaN

在Python中基于组/ID将两个数据帧进行映射,找出较接近的值

python 分代垃圾收集:get_count 没有报告正确的对象创建数?

Python 3 - 给定未知数量的类别动态地将字典嵌套到列表中

如果原始字符串包含正斜杠,如何返回具有不同可能性的新字符串

使用 OpenCV 从图像中减go 一条线

Python 3 `str.__getitem__` 的计算复杂度是多少?

spaCy 中的匹配模式返回空结果

删除重复项,但将值相加为一

Visual Studio Code 中的 Python 3.x 类型提示

Python图例属性错误

django - 值更改后自动更新日期

Python configparser 不会接受没有值的键

为什么排序列表比未排序列表大

为什么在 Python 3 中实例的 __dict__ 的大小要小得多?

Pylint 中的模块PyQt5.QtWidgets错误中没有名称QApplication