对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中的mock库对Python代码进行模拟测试
Apr 16 Python
Python中修改字符串的四种方法
Nov 02 Python
Python生成指定数量的优惠码实操内容
Jun 18 Python
在python plt图表中文字大小调节的方法
Jul 08 Python
简单的Python调度器Schedule详解
Aug 30 Python
pycharm修改file type方式
Nov 19 Python
python飞机大战 pygame游戏创建快速入门详解
Dec 17 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
Mar 06 Python
Python OrderedDict字典排序方法详解
May 21 Python
django form和field具体方法和属性说明
Jul 09 Python
python正则表达式re.search()的基本使用教程
May 21 Python
Python常遇到的错误和异常
Nov 02 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
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
一个简单的PHP&MYSQL留言板源码
2020/07/19 PHP
php curl常用的5个经典例子
2017/01/20 PHP
PHP 实现手机端APP支付宝支付功能
2018/06/07 PHP
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
JavaScript中利用for循环遍历数组
2017/01/15 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
Cocos2d实现刮刮卡效果
2018/12/20 Javascript
深入分析element ScrollBar滚动组件源码
2019/01/22 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
Python Web版语音合成实例详解
2019/07/16 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
HTML5 实现图片上传预处理功能
2020/02/06 HTML / CSS
lululemon美国官网:瑜伽服+跑步装备
2018/11/16 全球购物
Collection和Collections的区别
2016/05/02 面试题
大学生学习党课思想汇报
2014/01/03 职场文书
英语感恩演讲稿
2014/01/14 职场文书
敬老文明号事迹材料
2014/01/16 职场文书
关于运动会的口号
2014/06/07 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记