码迷,mamicode.com
首页 > 编程语言 > 详细

python中*args和**kwargs的使用

时间:2019-09-17 22:26:46      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:*args   rgs   结果   bsp   个数   数字   元祖   可变   一个   

一.介绍

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}。这也就是拆包的过程。

 

python中*args和**kwargs的使用

标签:*args   rgs   结果   bsp   个数   数字   元祖   可变   一个   

原文地址:https://www.cnblogs.com/hao2018/p/11537395.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!