python函数的可变参数*args和关键字参数**kw

函数的可变参数
可变参数,故名思义,可变即参数数量是可变的,不定的,有什么好处呢?还得从下面的这个实例说起。
假如我们要求计算任意几个整数的和,我们可以写以下这个函数
def sum(num):
    total = 0
    for i in num:
        total += i
    return total
调用的时候,我们事先需要组装出一个list或tuple出来,如:
sum([1,3,5,7,9,10]) 或 sum((1,3,5,9,10))
是不是视觉上有点碍眼?因们不够直观,我们一般是希望有如下这种方式的调用。
sum(1,3,5,7,9,10)
其实只需要加一个'*'就可以了。
def sum(*num):
    total = 0
    for i in num:
        total += i
    return total    
num接收的是一个list或一个tuple.然后我们就可以如愿的这样的调用了。
sum(1,2,3,4,5,6)
sum()
如果我们已经定义的一个list或tuple, 怎么调用呢?
num = [1,3,5,7,9]
可以这样调用
sum(num[0], [num[1], num[2], num[3], num[4])
但这样也很烦烦,以下这样的调用方式更好。
sum(*num)
函数的关键字参数
有以下这么个需求,在学校新学生开学注册的时候,其姓名和性别是必要的,其它的一些信息是可选的,应该怎么定义这个函数为好呢?
def student(name, sex, **other):
    print(f'name:{name}, sex:{sex}, other:{other}')
在函数调用时,可以只传入必选参数。
student('Jack', '男')
也可以传入可选参数:
student('jack', '男', age = 22, city = '深圳')
>> name:jack, sex:男, other:{'age':22, 'city':'深圳'}
类似的,我们也可以要传入的关键字参数还组装出来
extra = {'age':22, 'city':'深圳'}
要调用时就可以以下这样的写了
student('jack', '男', **extra)
但这样又有一个问题,就是可以传入任意的关键字,而这些任意的关键字可能并不是我们需要的,所以需要对关键字作一个限制。
def student(name, sex, *, age, city):
    pass
命名关键字参数前面必须要加'*', 命名关键字参数调用时必须要带关键字才合法
student('jack', '男', age = 22, city = '深圳')
如果命名关键字前面已有可变参数,则定义时不需要再加'*'了。
def student(name, sex, *args, age, city):
    pass
调用时必须要带关键字才合法
student('jack', '男', age = 22, city = '深圳')
但事实上,以上两种形式,在实际的应用中,都是组合式的来应用的。如:
def decr(*args, **kw):
    pass
    
这种写法可以传入任意的参数, 无论它的参数是如何定义的
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值