浅谈python3打包与拆包在函数的应用详解


Posted in Python onMay 02, 2020

1、序列(拆包)

*用作序列拆包:*可对字符串、列表、集合、元组、字典、数字元素等序列进行拆包

print(*(1,2,3,4,5,6))
#1 2 3 4 5 6
print(*[1,2,3,4,5,6])
#1 2 3 4 5 6

序列拆包赋值:

注意:*变量 不能在第一个位置,否则会报错

a, b, *c = 0, 1, 2, 3 #获取剩余部分
a, *b, c = 0, 1, 2, 3 #获取中间部分
a, b, *c = 0, 1    
a, *b, c = 0, 1

优先对位置变量赋值,再对拆包的赋值

#测试结果
print(a,b,c)
0 1 [2,3]
0 [1,2] 3
0 1 [] #优先满足普通变量a、b的赋值
0 [] 1 #优先满足普通变量a、c的赋值

了解了一些基础的 * 拆包后我们现在来聊聊函数中的打包和拆包:

2、函数定义的多种形参(打包)

函数定义时多种形参的位置顺序

函数形参顺序为:def 函数名(【位置参数】,【*元组参数】,【默认参数=默认值】,【**字典参数】):

注意:形参里面的 * 和 ** 的含义是打包

【位置参数】:最普通的形参,必须与实参一 一对齐
【 * 元组参数】:把字符串、列表、集合、元组、字典、数字元素等序列打包成元组作为形参
【**字典参数】:把多个实参打包成字典作为形参
【默认参数=默认值】:函数调用时没有传入时用默认值,传入时用传入值

def 函数名(a,*b,c=3,**d):
  print("a:",a) 
  print('b:',b) 
  print('c:',c)
  print('d:',d)
# *元组参数只接受单一的值,而**字典参数是进行接收键值对
函数名(1,2,3,4,5,6,7,name="小明",age=18,sex="男")

#输出结果:
a: 1
b: (2, 3, 4, 5, 6, 7)
c: 3
d: {'name': '小明', 'age': 18, 'sex': '男'}

3、函数调用时的实参(拆包)

def tk(c,d,e,f,g): #d,e,f,g分别接收 1 2 3 4
  print(c)
  print(d,e,f,g)
a=[1,2,3,4]
b={1,2,3,4}
tk(a,*b) # *b将集合拆解为数字元素序列 1 2 3 4

运行结果:
[1, 2, 3, 4]
1 2 3 4

补充:

使用命名参数可大大增强函数调用的灵活性(参数位置无需一 一对应,但参数名必须一 一对应)

浅谈python3打包与拆包在函数的应用详解

总结:默认参数与命名参数一样,前者是形参,后者是实参**

让我们结合实参和形参看一下在函数中打包与拆包

def tk(a,*b): #2、再将数字元素序列 1 2 3 4打包成元组(1,2,3,4)
  print(a)
  print(b)
a1=[1,2,3,4]
b1={1,2,3,4}
tk(a1,*b1)  #1、先将b1拆包成数字元素序列 1 2 3 4 再传递给元组形参*b

#输出结果:
[1, 2, 3, 4] #a1未打包
(1, 2, 3, 4) #b1为打包后的元组

总结:函数形参和函数实参的*含义不一样,前者是打包,后者是拆包

对单个值操作 对任意值操作
位置参数、默认参数、命名参数 *元组参数、 **字典参数

4、函数返回多值时的打包

接收函数返回值的两种情况:

def 函数():
	return 返回值1 返回值2 返回值3
#1、当用一个变量接受多个返回值时,会打包成一个元组传递给变量
a=函数()
print(a)

#2、用与之数目对应的变量接受多个返回值
b,c,d=函数()
print(b,c,d)

#输出结果
(返回值1,返回值2,返回值3) #打包成元组
返回值1 返回值2 返回值3

到此这篇关于浅谈python3打包与拆包在函数的应用详解的文章就介绍到这了,更多相关python3打包与拆包内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python list使用示例 list中找连续的数字
Jan 27 Python
python将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 Python
python计算日期之间的放假日期
Jun 05 Python
Flask框架Jinjia模板常用语法总结
Jul 19 Python
Python中实例化class的执行顺序示例详解
Oct 14 Python
ML神器:sklearn的快速使用及入门
Jul 11 Python
深入了解如何基于Python读写Kafka
Dec 31 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
记一次django内存异常排查及解决方法
Aug 07 Python
Django DRF认证组件流程实现原理详解
Aug 17 Python
Python Pivot table透视表使用方法解析
Sep 11 Python
Python将QQ聊天记录生成词云的示例代码
Feb 10 Python
构建高效的python requests长连接池详解
May 02 #Python
如何基于windows实现python定时爬虫
May 01 #Python
如何基于python实现不邻接植花
May 01 #Python
Python接口测试结果集实现封装比较
May 01 #Python
解决python虚拟环境切换无效的问题
Apr 30 #Python
python爬虫实现POST request payload形式的请求
Apr 30 #Python
Pycharm IDE的安装和使用教程详解
Apr 30 #Python
You might like
在mysql数据库原有字段后增加新内容
2009/11/26 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
php中http与https跨域共享session的解决方法
2014/12/20 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
php实现数字补零的方法总结
2018/09/12 PHP
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
url参数中有+、空格、=、%、&、#等特殊符号的问题解决
2013/05/15 Javascript
js实现的捐赠管理完整实例
2015/01/20 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
flask入门之表单的实现
2018/07/18 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
pycharm创建一个python包方法图解
2019/04/10 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
学python需要去培训机构吗
2020/07/01 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
护理自荐信范文
2013/10/05 职场文书
销售心得体会
2014/01/02 职场文书
开会迟到检讨书
2014/02/03 职场文书
节能标语大全
2014/06/21 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL