浅谈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生成验证码实例
Aug 21 Python
Python打印斐波拉契数列实例
Jul 07 Python
Python 绘图和可视化详细介绍
Feb 11 Python
VTK与Python实现机械臂三维模型可视化详解
Dec 13 Python
浅谈Python2获取中文文件名的编码问题
Jan 09 Python
python 移除字符串尾部的数字方法
Jul 17 Python
python实现简易数码时钟
Feb 19 Python
Pytorch 之修改Tensor部分值方式
Dec 27 Python
基于Python的一个自动录入表格的小程序
Aug 05 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 Python
Python APScheduler执行使用方法详解
Dec 10 Python
Python实现一个论文下载器的过程
Jan 18 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过滤★等特殊符号的正则
2014/01/27 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
JavaScript 内置对象属性及方法集合
2010/07/04 Javascript
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
jquery制作LED 时钟特效
2015/02/01 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
Vue数据驱动模拟实现1
2017/01/11 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
angular2模块和共享模块详解
2018/04/08 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
JavaScript碎片—函数闭包(模拟面向对象)
2019/03/13 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
2019/10/23 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
vue编写简单的购物车功能
2021/01/08 Vue.js
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
python基于opencv检测程序运行效率
2019/12/28 Python
几款好用的python工具库(小结)
2020/10/20 Python
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
荷兰本土平价百货:HEMA
2017/10/23 全球购物
营销与策划应届生求职信
2013/11/04 职场文书
法学毕业生自荐信
2013/11/13 职场文书
校园歌手大赛策划书
2014/01/17 职场文书
人民教师的自我评价分享
2014/02/21 职场文书
单位委托书怎么写
2014/08/02 职场文书