python函数定义中的/和*的作用
特殊参数https://docs.python.org/zh-cn/3/tutorial/controlflow.html#special-parameters
函数定义中的单独出现的/和*的作用
/ 和 * 是可选的。
/用来指明他前面的函数形参必须使用位置参数。
*用来指明他后面的函数形参必须为关键字参数的形式。
/ 和 *若同时出现,/ 在 *的前面。
下面给出示例
例1
def f1(a, b, /):
return a + b
对于上面这个函数而言,调用f1时参数a、b只能是位置参数(而不能以关键字参数),即f1(2, 3)执行正确而f1(a=2, 3)和f1(2, b=3)将执行错误。
例2
def f1(a, *, b, c):
return a + b + c
对于上面这个函数而言,调用时参数a可以是位置或关键字参数, 但b、c参数一定要以关键字参数的形式,如f1(1, b=4, c=5),否则将会报错。
例3
def f(a, b, /, c, *, d, e):
print(a, b, c, d, e)
当我们调用函数f时,a、b只能是位置参数(而能以关键字形式传参);c可以是位置或关键字参数,d、e只能以关键字参数传参。
可以如下调用
f(10,20,30,d=40,e=50)
f(10,20,c=30,d=40,e=50)
而以下调用方式均会抛出异常
f(a=1, 2, c=3, d=4, e=5) # a不能以关键字参数传参
f(1, 2, 3, 4, e=5) # d只能以关键字参数传参