对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中使用base64模块处理字符编码的教程
Apr 28 Python
Python 爬虫学习笔记之多线程爬虫
Sep 21 Python
11月编程语言排行榜 Python逆袭C#上升到第4
Nov 15 Python
python自动化报告的输出用例详解
May 30 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
Dec 20 Python
python实现剪切功能
Jan 23 Python
在Django admin中编辑ManyToManyField的实现方法
Aug 09 Python
Python笔记之观察者模式
Nov 20 Python
Django实现列表页商品数据返回教程
Apr 03 Python
Django的ListView超详细用法(含分页paginate)
May 21 Python
正确的理解和使用Django信号(Signals)
Apr 14 Python
教你怎么用python爬取爱奇艺热门电影
May 20 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开发中常用的8个小技巧
2008/08/27 PHP
php下载文件的代码示例
2012/06/29 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
jquery 表单进行客户端验证demo
2009/08/24 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
Angular2 自定义validators的实现方法
2017/07/05 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
nodeJS与MySQL实现分页数据以及倒序数据
2020/06/05 NodeJs
Vue $attrs & inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
python tkinter库实现气泡屏保和锁屏
2019/07/29 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
使用Tkinter制作信息提示框
2020/02/18 Python
浅谈pytorch中的BN层的注意事项
2020/06/23 Python
Python Selenium实现无可视化界面过程解析
2020/08/25 Python
JACK & JONES英国官方网站:欧洲领先的男装生产商
2017/09/27 全球购物
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
采购员的工作职责
2013/12/26 职场文书
超市重阳节活动方案
2014/02/10 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
女生抽烟检讨书
2014/10/05 职场文书
清明节扫墓活动总结
2015/02/09 职场文书
小学生读书笔记范文
2015/06/30 职场文书
小学语文国培研修日志
2015/11/13 职场文书
员工升职自我评价
2019/03/26 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
正确的理解和使用Django信号(Signals)
2021/04/14 Python
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫