对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中的字符串与字符编码(推荐)
Dec 14 Python
Python中matplotlib中文乱码解决办法
May 12 Python
Python中一个for循环循环多个变量的示例
Jul 16 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
Jul 19 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
Aug 23 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
Apr 27 Python
python爬虫中的url下载器用法详解
Nov 30 Python
Matplotlib中rcParams使用方法
Jan 05 Python
Flask处理Web表单的实现方法
Jan 31 Python
Pycharm制作搞怪弹窗的实现代码
Feb 19 Python
一篇文章弄懂Python中的内建函数
Aug 07 Python
python的netCDF4批量处理NC格式文件的操作方法
Mar 21 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+MYSQL开发工具及资源收藏
2007/01/02 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
php实现singleton()单例模式实例
2014/11/06 PHP
php中的登陆login实例代码
2016/06/20 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
jQuery Validate初步体验(一)
2015/12/12 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
js字符串与Unicode编码互相转换
2017/05/17 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
Vue作用域插槽slot-scope实例代码
2018/09/05 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
TypeScript中使用getElementXXX()的示例代码
2019/09/12 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
Python实现简单截取中文字符串的方法
2015/06/15 Python
Python简单计算数组元素平均值的方法示例
2017/12/26 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
Python常见的pandas用法demo示例
2019/03/16 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
Visual Studio code 配置Python开发环境
2020/09/11 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
用python实现一个简单的验证码
2020/12/09 Python
英语专业个人求职自荐信
2013/09/21 职场文书
设计师求职信模板
2014/05/06 职场文书
2015年大学生党员承诺书
2015/04/27 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
高三化学教学反思
2016/02/22 职场文书
Redis性能监控的实现
2021/07/09 Redis
Golang 并发下的问题定位及解决方案
2022/03/16 Golang
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers
css3 选择器
2022/05/11 HTML / CSS
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技