什么是*args和**kwargs?

什么是*args和**kwargs?

1. 拆包

***可以很方便的分别实现元组(列表、集合)和字典的拆包,拆包顾名思义就是将容器中的元素给一个一个拆出来:

ls1 = [1, 2, 3, 4]
ls2 = [*ls1, 5, 6, 7]
print(ls1)

dic1 = {'one':1, 'two':2, 'three':3}
dic2 = {**dic1 ,'four':4, 'five':5}
print(dic2)

'''
[1, 2, 3, 4]
{'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5}
'''

2. 任意参数

​ 但如果将***应用到函数的传参当中来,那情况将会正好相反,*args可以将所有传入的非关键字参数保存在args这个元组中,并且顺序和你输入的顺序一致,所有的关键字参数保存到kwargs这个字典中,就像下面这样:

def func(*args, **kwargs):
    print(args)
    print(kwargs)
        
func(1, 3, 5, 7, x=3, y=4, z=3)
'''
(1, 3, 5, 7)
{'x': 1, 'y': 2, 'z': 3}
'''

​ 通过***就可以向一个函数传入任意的参数。

​ 但是一旦使用*args和**kwargs接收参数,所有的形参和关键字参数都要放在最前面,也不要放在中间,否则不仅显得很low,还会报错,代码如下:

def func(*args, **kwargs, x=3):
    print(args)
    print(kwargs)
        
func(1, 3, 5, 7, x=3, y=4, z=3)

'''
  File "<ipython-input-31-0e57d13e670f>", line 1
    def func(*args, **kwargs, x=3):
                              ^
SyntaxError: invalid syntax
'''

​ args和kwargs并不是固定的,也可以使用其他的名字,但是args和kwargs是比较通用的命名。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值