*args 和 **kwargs 主要用于函数定义。
当我们不确定往一个函数中传入多少参数,或者希望以元组(tuple)或者列表(list)的形式传参数的时候,我们可以使用*args;当我们不知道往函数中传递多少个关键词参数或者想传入字典作为关键词参数的时候我们可以使用**kwargs(args、kwargs两个标识符是通俗的命名约定,可以但不建议修改)。
*args开头的一个星号*把序列或者集合解包(unpack)成位置参数,**kwargs开头的两个星号**把字典解包成关键词参数。
下面使用了可变参数*args实现对不定数量的数字求和:
def get_sum(*args):count = 0for num in args:count += numprint(count)get_sum(1, 1) # 2
get_sum(1, 1, 2, 2) # 6
nums = [1,2,3] # 创建1个列表使用*解包再传入参数
get_sum(*nums) # 6
下面测试了关键字参数**kwargs:
def test_kwargs(**kwargs):print(kwargs)test_kwargs(name='trophy') #{'name': 'trophy'}
test_kwargs(name='trophy', age=22) #{'name': 'trophy', 'age': 22}
dic = {
'name': 'trophy', 'age': 22} #创建1个字典使用**解包再传入函数
test_kwargs(**dic) #{'name': 'trophy', 'age': 22}
下面将这两种参数混合使用,注意参数的顺序:
def test_mix(*args, **kwargs):print(args)print(kwargs)test_mix(1, 2, 3, name='trophy', age=22)
#输出:
#(1, 2, 3)
#{'name': 'trophy', 'age': 22}