*args和**kwargs:属于可变参数
*args会将传入的参数放入名为args的元组中
 **kwargs会将传入的参数放入名为kwargs的字典中
def test1(*args,**kwargs):
    print(args)
    print(kwargs)
test1(1,2,3,4,5,6,a=7,b=8)
 
(1, 2, 3, 4, 5, 6)
{'a': 7, 'b': 8}
 
在形式参数前面加一个*号,它会收集所有剩下没有配对的实际参数位置参数
 *: 一个*号只能表示位置参数
def test1(a,b,c,*args):
    print(a)
    print(b)
    print(c)
    print(args)
test1(1,2,4,5,6,7)
 
1
2
4
(5, 6, 7)
 
**: 只能收集关键字参数,打印的结果为字典形式
 作用:在函数定义的时候,不知道有多少个实际参数会传入
def test2(**kwargs):
    print(kwargs)
test2(a=1,b=2,c=3,d=4)
 
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
 
而在工作中往往*args,**kwargs一起使用
def test2(*args,**kwargs):
    print(args)
    print(kwargs)
test2(6,8,9,7,a=1,b=2,c=3,d=4)
 
(6, 8, 9, 7)
{'a': 1, 'b': 2, 'c': 3, 'd': 4}










