浅谈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 Django做网页
Nov 04 Python
python之wxPython应用实例
Sep 28 Python
Python遍历zip文件输出名称时出现乱码问题的解决方法
Apr 08 Python
Python实现简单遗传算法(SGA)
Jan 29 Python
Python Unittest根据不同测试环境跳过用例的方法
Dec 16 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
Django 开发环境与生产环境的区分详解
Jul 26 Python
对Python 字典元素进行删除的方法
Jul 31 Python
基于Python中Remove函数的用法讨论
Dec 11 Python
Python 生成短8位唯一id实战教程
Jan 13 Python
【超详细】八大排序算法的各项比较以及各自特点
Mar 31 Python
python基础之//、/与%的区别详解
Jun 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
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
php输出形式实例整理
2020/05/05 PHP
读jQuery之一(对象的组成)
2011/06/11 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
jquery里的正则表达式说明
2011/08/03 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
angular实现商品筛选功能
2017/02/01 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
2019/10/23 Javascript
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
Python使用Flask框架获取当前查询参数的方法
2015/03/21 Python
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
Python实现周期性抓取网页内容的方法
2015/11/04 Python
浅谈python抛出异常、自定义异常, 传递异常
2016/06/20 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
Python如何基于rsa模块实现非对称加密与解密
2020/01/03 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
2020/06/24 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
小橄榄树:Le Petit Olivier
2018/04/23 全球购物
关于VPN
2012/06/10 面试题
餐饮业会计岗位职责
2013/12/19 职场文书
年度考核自我鉴定
2014/03/19 职场文书
服务承诺口号
2014/05/22 职场文书
2015年母亲节活动策划方案
2015/05/04 职场文书
经济纠纷起诉状
2015/05/20 职场文书
户外拓展训练感想
2015/08/07 职场文书
公安纪律作风整顿心得体会
2016/01/23 职场文书
八年级历史教学反思
2016/02/19 职场文书
Python使用Web框架Flask开发项目
2022/06/01 Python