对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中dir函数用法分析
Apr 17 Python
详细讲解Python中的文件I/O操作
May 24 Python
python fabric实现远程部署
Jan 05 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
Jan 07 Python
python3库numpy数组属性的查看方法
Apr 17 Python
django将图片上传数据库后在前端显式的方法
May 25 Python
python3.6利用pyinstall打包py为exe的操作实例
Oct 31 Python
Python设计模式之迭代器模式原理与用法实例分析
Jan 10 Python
Python3如何在Windows和Linux上打包
Feb 25 Python
Python扫描端口的实现
Jan 25 Python
利用Python第三方库实现预测NBA比赛结果
Jun 21 Python
Python如何使用循环结构和分支结构
Apr 13 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
加速XP搜索功能堪比vista
2007/03/22 PHP
php 远程图片保存到本地的函数类
2008/12/08 PHP
PHP 日志缩略名的创建函数代码
2010/05/26 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
python中的格式化输出用法总结
2016/07/28 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
flask 实现token机制的示例代码
2019/11/07 Python
幼儿如何来做好自我评价
2013/11/05 职场文书
晚归检讨书
2014/02/19 职场文书
小学班主任培训方案
2014/06/04 职场文书
师范生免费教育协议书范本
2014/10/09 职场文书
私用公车造成事故检讨书
2014/11/16 职场文书
努力工作保证书
2015/02/28 职场文书
六一晚会主持词开场白
2015/05/28 职场文书
亮剑观后感300字
2015/06/05 职场文书
邓小平文选读书笔记
2015/06/29 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL