python中*args和**kwargs的使用

一.介绍

1.*args和**kwargs这两个对于函数来说是可变参数

2.*args返回的是一个元祖

3.**kwargs返回的是一个字典

二.演示

说明:对于以下函数,*args可以识别非a=1这种关键字参数以外的所有参数;**kwargs只能识别a=1这种关键字参数,其他的都不识别

def add(*args, **kwargs):     #*args和**kwargs是打包过程
    print(args, kwargs)


add(1, 2, 3, 4, a=1, b=2)
add(1)
add(a=1, b=2)
add(1, {"a": 1})
add("1", [1, 2], {"a": 1}, (1, 2))
add(*[1, 2], **{"a": 1})

结果:

(1, 2, 3, 4) {'a': 1, 'b': 2}
(1,) {}
() {'a': 1, 'b': 2}
(1, {'a': 1}) {}
('1', [1, 2], {'a': 1}, (1, 2)) {}

(1, 2) {'a': 1}

结论:

1.很明显只有a=1,b=2这种的**kwargs才能识别到,要不然就返回空字典;对于非a=1,b=2这种的*args才能识别到,要不然返回一个空的元祖。

2.但是对于add(*[1, 2], **{"a": 1})这种情况呢,结果为啥是(1, 2) {'a': 1},而不是([1,2],{"a":1})呢,那是因为当你在*(1,2)前面加个*号那么就相当于把它拆成1,2两个数字了,然后传给了*args了,那对于**{"a":1}前面加个两个*号那么就相当于把它拆成a=1了,然后传给了**kwargs,所以最后结果就是(1, 2) {'a': 1}。这也就是拆包的过程。

 

posted @ 2019-09-17 21:38  珠海-路飞  阅读(287)  评论(0编辑  收藏  举报