对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 相关文章推荐
python文件读写并使用mysql批量插入示例分享(python操作mysql)
Feb 17 Python
Python中encode()方法的使用简介
May 18 Python
Python编程之string相关操作实例详解
Jul 22 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
mac下给python3安装requests库和scrapy库的实例
Jun 13 Python
python字典setdefault方法和get方法使用实例
Dec 25 Python
使用pytorch完成kaggle猫狗图像识别方式
Jan 10 Python
python 递归调用返回None的问题及解决方法
Mar 16 Python
区分python中的进程与线程
Aug 13 Python
python实现简单贪吃蛇游戏
Sep 29 Python
python cookie反爬处理的实现
Nov 01 Python
举例讲解Python装饰器
Dec 24 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面向对象之访问者模式+组合模式
2017/05/22 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
JS仿淘宝实现的简单滑动门效果代码
2015/10/14 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
2016/09/08 Javascript
javascript跨域请求包装函数与用法示例
2016/11/03 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
vue实现axios图片上传功能
2019/08/20 Javascript
Python中请使用isinstance()判断变量类型
2014/08/25 Python
python格式化字符串实例总结
2014/09/28 Python
python数据类型_字符串常用操作(详解)
2017/05/30 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
在python中做正态性检验示例
2019/12/09 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
CSS3中的@keyframes关键帧动画的选择器绑定
2016/06/13 HTML / CSS
会计主管岗位职责范文
2013/11/08 职场文书
热门专业求职信
2014/05/24 职场文书
工地质量标语
2014/06/12 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
毕业生就业推荐表导师评语
2014/12/31 职场文书
期中考试复习计划
2015/01/19 职场文书
学校推普周活动总结
2015/05/07 职场文书
解约证明模板
2015/06/19 职场文书
小学语文教学反思范文
2016/03/03 职场文书
闭幕词的写作格式与范文!
2019/06/24 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android
virtualenv隔离Python环境的问题解析
2022/06/21 Python