函数定义中的星号和反斜杠号

在阅读源码时, 经常会遇到一些函数的定义中有*, /, []这些特殊符号. 其中中括号作为上面三种中最常见的一种, 左右中括号之间的变量在调用函数时, 可以给可不给.

*/符号见的比较少.

型参列表中*的作用

函数形参列表中符号*表示, 后面的形参只能为关键字参数(keyword argument), 不能为位置参数(positional argument).

也就是说调用该函数时, 给*后面定义的参数传参时, 只能用关键字字典的格式传, 而不能寄希望于按顺序给定并分配.

>>> def func(a, *, b):
...     print(a, b)
... 
>>> func(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: func() takes 1 positional argument but 2 were given
>>> func(1, b=2)
1 2
>>>

型参列表中/的作用

/前的参数只能是位置参数, 不能是关键字参数. 例如sum函数的定义如下:

def sum(iterable, start=0, /)

采用如下的方式调用会报错:

sum([1], start=0)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-02aa4e519b31> in <module>()
----> 1 sum([1], start=0)

TypeError: sum() takes no keyword arguments

最后更新于

这有帮助吗?