浅谈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设计足球联赛赛程表程序的思路与简单实现示例
Jun 28 Python
python中的字典操作及字典函数
Jan 03 Python
python爬取拉勾网职位数据的方法
Jan 24 Python
Python无损音乐搜索引擎实现代码
Feb 02 Python
Python实现自动访问网页的例子
Feb 21 Python
Django模型中字段属性choice使用说明
Mar 30 Python
python MultipartEncoder传输zip文件实例
Apr 07 Python
python如何变换环境
Jul 21 Python
零基础学python应该从哪里入手
Aug 11 Python
python之openpyxl模块的安装和基本用法(excel管理)
Feb 03 Python
matplotlib部件之套索Lasso的使用
Feb 24 Python
Python中字符串对象语法分享
Feb 24 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
神族 Protoss 历史背景
2020/03/14 星际争霸
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
jquery remove方法应用详解
2012/11/22 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
PHP PDO操作总结
2014/11/17 Javascript
浅析JavaScript中的array数组类型系统
2016/07/18 Javascript
JavaScript中函数声明与函数表达式的区别详解
2016/08/18 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
vue element-ui读取pdf文件的方法
2019/11/26 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
2020/09/02 Javascript
JS数组索引检测中的数据类型问题详解
2021/01/11 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
python列出目录下指定文件与子目录的方法
2015/07/03 Python
python插入排序算法实例分析
2015/07/03 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
Python urllib3软件包的使用说明
2020/11/18 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
进程的查看和调度分别使用什么命令
2013/12/14 面试题
护理学毕业生自荐信
2013/10/02 职场文书
写好自荐信的几个要点
2013/12/26 职场文书
公司人力资源的自我评价
2014/01/02 职场文书
个人党性剖析材料
2014/02/03 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
支部鉴定材料
2014/06/02 职场文书
2016公司年会通知范文
2015/04/25 职场文书
工程进度款催款函
2015/06/24 职场文书
如何写好竞聘报告
2019/04/03 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
MySQL池化框架学习接池自定义
2022/07/23 MySQL