python函数参数中的/和*是什么意思?

在python3.8之后函数参数中允许出现/和*号,/用来指明某些函数形参必须使用位置参数而非关键字参数的形式,*出现在函数参数中第一种含义可以表示为可变参数

,一般写作*args;对于单独出现在参数中的*参数,则表示,*后面的参数必须为关键字参数的形式,接下来详细说下该用法:

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),否则将会报错。

def f2(a, *, b, c=5):
    return a + b + c

如果是这种情况下调用函数,参数a可以任意值,但参数b一定要以关键字参数的形式传参,如f2(2, b=3),但是如果想传入c参数,那么c参数的要求和b参数一样都为关键字参数形式,如f2(2,b=3,c=4)。

3 /和*都出现在函数参数中

比如我们定义一个函数f

def f(a, b, /, c, *, d, e):
    print(a, b, c, d, e)

当我们调用函数f时,a,b参数可以为任意型python所支持的值,就是不能以关键字形式传参;c可以为任意型python所支持的值,d,e只能以关键字参数传参。以下调用方式均会抛出异常

f(a=1, 2, c=3, d=4, e=5) # a不能以关键字参数传参

f(1, 2, 3, 4, e=5) # d只能以关键字参数传参

4 总结

如果你希望调用者使用函数时一定不能使用关键字参数传参,那么只需要把这些参数放在/前即可;如果你希望调用者使用函数时一定要使用某些参数,且必须为关键字参数传参,那么只需要把这些参数放在*后面即可。

posted @ 2022-04-12 14:11  xiondun  阅读(2450)  评论(1编辑  收藏  举报