博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中*args和**kwargs的使用
阅读量:5301 次
发布时间:2019-06-14

本文共 811 字,大约阅读时间需要 2 分钟。

一.介绍

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

 

转载于:https://www.cnblogs.com/hao2018/p/11537395.html

你可能感兴趣的文章
C语言作业3
查看>>
C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
查看>>
koogra--Excel文件读取利器
查看>>
ASP.NET 使用ajaxupload.js插件出现上传较大文件失败的解决方法
查看>>
jenkins搭建
查看>>
C#中使用Split分隔字符串的技巧
查看>>
(springboot)freemarker(二)
查看>>
linux下golang gRPC配置详解
查看>>
mongodb 简单使用说明
查看>>
eclipse的调试方法的简单介绍
查看>>
OneAPM 云监控部署与试用体验
查看>>
加固linux
查看>>
wget 升级
查看>>
为什么需要大数据安全分析?
查看>>
day13.字典复习
查看>>
IPSP问题
查看>>
(转)Java中的String为什么是不可变的? -- String源码分析
查看>>
HNU 10362 A+B for Input-Output Practice (II)
查看>>
iOS——UIButton响应传参数
查看>>
【转帖】关于'eh vector constructor/destructor iterator'的讨论及类的内存分布模型
查看>>