对python中的装包与解包实例详解


Posted in Python onAugust 24, 2019

*args和 **kwargs是常用的两个参数

*args:用于接受多余的未命名的参数,元组类型。

**kwargs:用于接受形参的命名参数,字典类型的数据。

可变参数args:

def fun(n, *args):
  print(n)
  print(args)   # 未拆包
  print(*args)  # 进行拆包
fun(1,2,3,4)

结果:

1
(2, 3, 4)
2 3 4

形参中的*args是接受数据的args,它是一个元组,把传入的数据放进args元组中。

函数中的args仍然是元组, *args就是将元组的数据进行拆包,一开始输入的形式。

关键字参数**kwargs

def fun(**kwargs):
  print(kwargs)    # 未拆包
  print(*kwargs) # 进行拆包
fun(a=1, b=2)

结果:

{'a': 1, 'b': 2}
a b

*args用来接受多余的未命名参数, **kwargs是用来接受命名参数。

装包的意义就是把未命名的参数和命名的参数放在元组或字典中。

解包

上面介绍了args, kwargs的装包作用,起到作用的是、 这两个参数。

1. 解包的意义就是将传递给函数的一个列表,元组,字典,拆分成独立的多个元素然后赋值给函数中的参变量。

2. 解压字典有两种解发,一种用*解的只有key,一种用**解的有key,value。但是这个方法**只能在函数定义中使用。

def fun(*args, **kwargs):
  for arg in args:
    print(arg)
  for k, v in kwargs.items():
    print(k, v)
  print('-'*50)
fun(a, c)  # 参数都赋值给args,并没有kwargs的参数
fun(*a, *c)   # 解压的参数都赋值给args 等价为 1, 2, 3, 'a', 'b', 'c'
fun(*a, **c)  # a解压给args,c解压给kwargs 等价为 1, 2, 3, 'a'=1, 'b'=2, 'c'=3

结果:

[1, 2, 3]
{'a': 1, 'b': 2, 'c': 3}
--------------------------------------------------
1
2
3
a
b
c
--------------------------------------------------
1
2
3
a 1
b 2
c 3

问题:

在传入参数时,可变参数(*)之前不能指定参数名

def myfun(a, *b):
  print(a)
  print(b)
myfun(a=1,2,3,4)


  myfun(a=1,2,3,4)
       ^
SyntaxError: positional argument follows keyword argument

2.函数传入实参时,可变参数(*)之后的参数必须指定参数名,否则就会被归到可变参数之中

def myfun(a, *b, c=None):
  print(a)
  print(b)
  print(c)
myfun(1,2,3,c=4)

1
(2, 3)
4

3.一个函数想要使用时必须明确指定参数名,可以将所有参数都放在可变参数之后

def myfun(*, a, b):
  print(a)
  print(b)
myfun(a=1, b=2)

4.关键字参数都只能作为最后一个参数,前面的参数按照位置赋值还是名称赋值都可以

def myfun(a, *b, c, **d):
  print(a)
  print(b)
  print(c)
  print(d)
myfun(1, 2, w=6, c=3, d=4, e=5)   # 记住可变参数(*)之前不能指定参数名

1
(2,)
3
{'w': 6, 'd': 4, 'e': 5}

以上这篇对python中的装包与解包实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
对numpy中shape的深入理解
Jun 15 Python
Python用5行代码写一个自定义简单二维码
Oct 21 Python
python+pyqt5实现图片批量缩放工具
Mar 18 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
Jun 04 Python
python binascii 进制转换实例
Jun 12 Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 Python
python+pygame实现坦克大战
Sep 10 Python
python每5分钟从kafka中提取数据的例子
Dec 23 Python
Python如何批量获取文件夹的大小并保存
Mar 31 Python
python+adb命令实现自动刷视频脚本案例
Apr 23 Python
Python实现Keras搭建神经网络训练分类模型教程
Jun 12 Python
python 如何做一个识别率百分百的OCR
May 29 Python
Python3进制之间的转换代码实例
Aug 24 #Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 #Python
FFrpc python客户端lib使用解析
Aug 24 #Python
用Python将Excel数据导入到SQL Server的例子
Aug 24 #Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
Aug 24 #Python
用Python爬取QQ音乐评论并制成词云图的实例
Aug 24 #Python
python解释器spython使用及原理解析
Aug 24 #Python
You might like
php连接数据库代码应用分析
2011/05/29 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
PHP实现链式操作的核心思想
2015/06/23 PHP
PHP合并数组+号和array_merge的区别
2015/06/25 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
JS获取计算机mac地址以及IP的实现方法
2014/01/08 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
2017/09/29 NodeJs
Three.js加载外部模型的教程详解
2017/11/10 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
[03:56]显微镜下的DOTA2第十一期——鬼畜的死亡先知播音员
2014/06/23 DOTA
Python httplib,smtplib使用方法
2008/09/06 Python
python基于phantomjs实现导入图片
2016/05/13 Python
python MySQLdb使用教程详解
2018/03/20 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
平面设计岗位职责
2013/12/14 职场文书
工艺工程师岗位职责
2014/03/04 职场文书
职业女性的职业规划
2014/03/04 职场文书
《云房子》教学反思
2014/04/20 职场文书
2015重阳节座谈会主持词
2015/07/30 职场文书
Mysql忘记密码解决方法
2022/02/12 MySQL
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android