最后更新于3年前
在阅读源码时, 经常会遇到一些函数的定义中有*, /, []这些特殊符号. 其中中括号作为上面三种中最常见的一种, 左右中括号之间的变量在调用函数时, 可以给可不给.
*
/
[]
但*和/符号见的比较少.
函数形参列表中符号*表示, 后面的形参只能为关键字参数(keyword argument), 不能为位置参数(positional argument).
也就是说调用该函数时, 给*后面定义的参数传参时, 只能用关键字字典的格式传, 而不能寄希望于按顺序给定并分配.
/前的参数只能是位置参数, 不能是关键字参数. 例如sum函数的定义如下:
sum
采用如下的方式调用会报错:
>>> 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 >>>
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