对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列表(list)常用操作方法小结
Feb 02 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
python制作mysql数据迁移脚本
Jan 01 Python
Django框架 Pagination分页实现代码实例
Sep 04 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
Python TCPServer 多线程多客户端通信的实现
Dec 31 Python
tf.concat中axis的含义与使用详解
Feb 07 Python
django项目中新增app的2种实现方法
Apr 01 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
May 22 Python
如何基于Python实现word文档重新排版
Sep 29 Python
详解python算法常用技巧与内置库
Oct 17 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
May 28 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修改NetBeans默认字体的大小
2013/07/02 PHP
php实现telnet功能示例
2014/04/08 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
PHP请求Socket接口测试实例
2016/08/12 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
php实现微信发红包功能
2018/07/13 PHP
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
vue实现引入本地json的方法分析
2018/07/12 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
[04:11]2014DOTA2国际邀请赛 CIS遗憾出局梦想不灭
2014/07/09 DOTA
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
利用Python为iOS10生成图标和截屏
2016/09/24 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
python装饰器代替set get方法实例
2019/12/19 Python
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
英国最受欢迎的母婴精品品牌:JoJo Maman BéBé
2021/02/17 全球购物
《老王》教学反思
2014/02/23 职场文书
实习指导老师评语
2014/04/26 职场文书
幼儿园师德演讲稿
2014/05/06 职场文书
文明和谐家庭事迹材料
2014/05/18 职场文书
煤矿安全生产标语
2014/06/06 职场文书
青奥会口号
2014/06/12 职场文书
经营理念标语
2014/06/21 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书