对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 相关文章推荐
Python3.0与2.X版本的区别实例分析
Aug 25 Python
Python进行数据科学工作的简单入门教程
Apr 01 Python
Python批量查询域名是否被注册过
Jun 21 Python
利用信号如何监控Django模型对象字段值的变化详解
Nov 27 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
Jan 31 Python
Windows下Anaconda2安装NLTK教程
Sep 19 Python
Python多线程threading模块用法实例分析
May 22 Python
django的分页器Paginator 从django中导入类
Jul 25 Python
python 图像处理画一个正弦函数代码实例
Sep 10 Python
python PIL模块的基本使用
Sep 29 Python
python调用百度API实现人脸识别
Nov 17 Python
python 爬取华为应用市场评论
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
MySql中正则表达式的使用方法描述
2008/07/30 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
微信公众平台开发实现2048游戏的方法
2015/04/15 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
IE与firefox之jquery用法区别
2008/10/03 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
javascript插入样式实现代码
2012/02/22 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
jQuery+formdata实现上传进度特效遇到的问题
2016/02/24 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
Vue入门之数据绑定(小结)
2018/01/08 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
python读取与写入csv格式文件的示例代码
2017/12/16 Python
Python实现处理逆波兰表达式示例
2018/07/30 Python
Django 实现购物车功能的示例代码
2018/10/08 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
python实现抠图给证件照换背景源码
2019/08/20 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
浅析Python 责任链设计模式
2020/09/11 Python
跑步爱好者一站式服务网站:Jack Rabbit
2016/09/01 全球购物
Weblogic的布署方式
2013/08/23 面试题
C#软件工程师英语面试题
2015/06/07 面试题
服务中心夜班服务员岗位职责
2013/11/27 职场文书
工作表现自我评价
2014/02/08 职场文书
租车协议书
2015/01/27 职场文书
学校国庆节活动总结
2015/03/23 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python
python中pandas对多列进行分组统计的实现
2021/06/18 Python