[转载] Python函数中的/和*参数释疑

4年前我还在思否写博客的时候,用的Python3.6,当时问了这问题:

Python函数参数中的\是什么意思?
https://segmentfault.com/q/1010000016198888

在这里插入图片描述
岁月是把杀猪刀啊,上次遇到这个问题还是4年前,哇哇哇

几天遇到这个问题,函数参数中的 * 是什么意思:

在这里插入图片描述

知乎上看到的一篇,写的很清楚

接下来全文转载自
https://zhuanlan.zhihu.com/p/132521381

在python3.8之后函数参数中允许出现/*号,/用来指明某些函数形参必须使用位置参数而非关键字参数的形式,*出现在函数参数中第一种含义可以表示为可变参数,一般写作*args;第二种含义可以表示关键字参数,一般写作**kwargs;最为特殊的是单独出现在参数中的*,它则表示,*后面的参数必须为关键字参数的形式,接下来详细说下该用法。

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 总结

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值