对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线程
Feb 26 Python
Python爬虫之xlml解析库(全面了解)
Aug 08 Python
Python之多线程爬虫抓取网页图片的示例代码
Jan 10 Python
使用Python处理Excel表格的简单方法
Jun 07 Python
mac 安装python网络请求包requests方法
Jun 13 Python
Django Admin实现三级联动的示例代码(省市区)
Jun 22 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
Python判断对象是否为文件对象(file object)的三种方法示例
Apr 26 Python
python使用pandas处理大数据节省内存技巧(推荐)
May 05 Python
python输出决策树图形的例子
Aug 09 Python
Python文本处理简单易懂方法解析
Dec 19 Python
TFRecord文件查看包含的所有Features代码
Feb 17 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 escape URL编码
2008/12/10 PHP
纯php打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
ext 同步和异步示例代码
2009/09/18 Javascript
jQuery示例收集
2010/11/05 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
jQuery实现点击关注和取消功能
2017/07/03 jQuery
react-native之ART绘图方法详解
2017/08/08 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
2017/09/29 NodeJs
ES6学习教程之模板字符串详解
2017/10/09 Javascript
AngularJS下$http服务Post方法传递json参数的实例
2018/03/29 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
详解Axios 如何取消已发送的请求
2018/10/20 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
Openlayers实现测量功能
2020/09/25 Javascript
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
python生成随机图形验证码详解
2017/11/08 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
python 遗传算法求函数极值的实现代码
2020/02/11 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
轻化专业学生实习自我鉴定
2013/09/20 职场文书
园艺师求职信
2014/03/10 职场文书
机电一体化专业求职信
2014/07/22 职场文书
工程资料员岗位职责
2015/04/13 职场文书
文艺演出主持词
2015/07/01 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
PHP中多字节字符串操作实例详解
2021/08/23 PHP