浅谈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 相关文章推荐
python3使用urllib模块制作网络爬虫
Apr 08 Python
Python实现图片转字符画的示例代码
Aug 21 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
Jan 26 Python
pandas每次多Sheet写入文件的方法
Dec 10 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
在numpy矩阵中令小于0的元素改为0的实例
Jan 26 Python
python使用pipeline批量读写redis的方法
Feb 18 Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 Python
django 使用全局搜索功能的实例详解
Jul 18 Python
python同步windows和linux文件
Aug 29 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
Jun 17 Python
python drf各类组件的用法和作用
Jan 12 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
Terran兵种介绍
2020/03/14 星际争霸
PHP模板引擎smarty详细介绍
2015/05/26 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
jquery实用代码片段集合
2010/08/12 Javascript
『jQuery』取指定url格式及分割函数应用
2013/04/22 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
关于javascript的一些知识以及循环详解
2016/09/12 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
JS实现随机生成10个手机号的方法示例
2018/12/07 Javascript
jQuery实现的五星点评功能【案例】
2019/02/18 jQuery
vue 中的 render 函数作用详解
2020/02/28 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
Python实现SMTP发送邮件详细教程
2021/03/02 Python
Python实现购物车功能的方法分析
2017/11/10 Python
Python学习笔记之视频人脸检测识别实例教程
2019/03/06 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
python3调用windows dos命令的例子
2019/08/14 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
2020/03/08 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
员工年终演讲稿
2014/01/03 职场文书
班组长岗位职责
2014/03/03 职场文书
2014年个人委托书范本
2014/10/13 职场文书
实习指导教师评语
2014/12/30 职场文书
搞笑老公保证书
2015/02/26 职场文书
小学生红领巾广播稿
2015/08/19 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis