浅谈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中的__new__与__init__魔术方法理解笔记
Nov 08 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
python 实现tar文件压缩解压的实例详解
Aug 20 Python
python函数式编程学习之yield表达式形式详解
Mar 25 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
Python分支语句与循环语句应用实例分析
May 07 Python
python正则爬取某段子网站前20页段子(request库)过程解析
Aug 10 Python
python修改FTP服务器上的文件名
Sep 11 Python
Python使用Matlab命令过程解析
Jun 04 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
Jun 12 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
Dec 01 Python
 python中的元类metaclass详情
May 30 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
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
php操作mysql数据库的基本类代码
2014/02/25 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
php使用curl实现ftp文件下载功能
2017/05/16 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
2008/03/22 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
详解基于angular路由的requireJs按需加载js
2017/01/20 Javascript
jQuery、layer实现弹出层的打开、关闭功能
2017/06/28 jQuery
vue+element搭建后台小总结 el-dropdown下拉功能
2020/04/10 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
Python中3种内建数据结构:列表、元组和字典
2014/11/30 Python
列举Python中吸引人的一些特性
2015/04/09 Python
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
python实现比较两段文本不同之处的方法
2015/05/30 Python
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
python使用udp实现聊天器功能
2018/12/10 Python
python实现转圈打印矩阵
2019/03/02 Python
python实现桌面气泡提示功能
2019/07/29 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
5分钟让你掌握css3阴影、倒影、渐变小技巧(小编推荐)
2016/08/15 HTML / CSS
美国家居装饰购物网站:Amanda Lindroth
2020/03/25 全球购物
中学生寄语大全
2014/04/03 职场文书
天猫活动策划方案
2014/08/21 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android
win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法
2022/06/25 Servers