对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私有属性和方法实例分析
Jan 15 Python
Python实现简单拆分PDF文件的方法
Jul 30 Python
python安装cx_Oracle模块常见问题与解决方法
Feb 21 Python
python executemany的使用及注意事项
Mar 13 Python
简单的python后台管理程序
Apr 13 Python
Python3实现的字典遍历操作详解
Apr 18 Python
python实现简单成绩录入系统
Sep 19 Python
如何使用Python脚本实现文件拷贝
Nov 20 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
PIL包中Image模块的convert()函数的具体使用
Feb 26 Python
Python批量处理csv并保存过程解析
May 16 Python
Python用tkinter实现自定义记事本的方法详解
Mar 31 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的图形函数中显示汉字
2006/10/09 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
java script编程起步(第三课)
2007/01/10 Javascript
js资料toString 方法
2007/03/13 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
Javascript模拟加速运动与减速运动代码分享
2014/12/11 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
2016/09/05 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
Gulp实现静态网页模块化的方法详解
2018/01/09 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
Python批量按比例缩小图片脚本分享
2015/05/21 Python
Python脚本暴力破解栅栏密码
2015/10/19 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
使用HTML和CSS实现的标签云效果(附demo)
2021/02/03 HTML / CSS
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
澳大利亚最早和最古老的巨型游戏专家:Yardgames
2020/02/20 全球购物
事业单位个人应聘自荐信
2013/09/21 职场文书
小学课外阅读总结
2014/07/09 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
中小学生学籍证明
2014/10/25 职场文书
2014年图书室工作总结
2014/12/09 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书
职工的安全责任书范文!
2019/07/02 职场文书
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js
Vue + iView实现Excel上传功能的完整代码
2021/06/22 Vue.js