对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 相关文章推荐
推荐11个实用Python库
Jan 23 Python
使用70行Python代码实现一个递归下降解析器的教程
Apr 17 Python
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
Jan 31 Python
python中PIL安装简单教程
Apr 21 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
Python 使用类写装饰器的小技巧
Sep 30 Python
Python 实现交换矩阵的行示例
Jun 26 Python
python之array赋值技巧分享
Nov 28 Python
使用pyplot.matshow()函数添加绘图标题
Jun 16 Python
python中numpy数组与list相互转换实例方法
Jan 29 Python
python神经网络编程之手写数字识别
May 08 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生成Flash动画的实现代码
2010/03/12 PHP
PHP中文编码小技巧
2014/12/25 PHP
PHP实现全角字符转为半角方法汇总
2015/07/09 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
js 分栏效果实现代码
2009/08/29 Javascript
用cssText批量修改样式
2009/08/29 Javascript
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
js或jquery实现页面打印可局部打印
2014/03/27 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
python改变日志(logging)存放位置的示例
2014/03/27 Python
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
Python绘制频率分布直方图的示例
2019/07/08 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
html5 application cache遇到的严重问题
2012/12/26 HTML / CSS
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
工商管理专业职业生涯规划
2014/01/01 职场文书
班级读书活动总结
2014/06/30 职场文书
新闻学专业求职信
2014/07/28 职场文书
2015年乡镇残联工作总结
2015/05/13 职场文书
预备党员考察意见范文
2015/06/01 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
2016国庆节67周年寄语
2015/12/07 职场文书
python关于集合的知识案例详解
2021/05/30 Python