浅谈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设计模式中单例模式的实现及在Tornado中的应用
Mar 02 Python
Python语言描述随机梯度下降法
Jan 04 Python
tensorflow学习笔记之简单的神经网络训练和测试
Apr 15 Python
Python Json模块中dumps、loads、dump、load函数介绍
May 15 Python
python迭代dict的key和value的方法
Jul 06 Python
python scipy求解非线性方程的方法(fsolve/root)
Nov 12 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
Mysql数据库反向生成Django里面的models指令方式
May 18 Python
Python 解决相对路径问题:"No such file or directory"
Jun 05 Python
Django Paginator分页器的使用示例
Jun 23 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
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
浅析php工厂模式
2014/11/25 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
php实现多站点共用session实现单点登录的方法详解
2019/09/18 PHP
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
利用jquery操作select下拉列表框的代码
2010/06/04 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
详解JavaScript基于面向对象之继承
2015/12/13 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
实例教学如何写vue插件
2017/11/30 Javascript
vuex 的简单使用
2018/03/22 Javascript
Vue自定义toast组件的实例代码
2018/08/15 Javascript
vue中的inject学习教程
2019/04/24 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
OpenCV实现人脸识别
2017/04/07 Python
python编写微信远程控制电脑的程序
2018/01/05 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
物理系毕业生自荐信
2013/11/01 职场文书
运动会通讯稿100字
2014/01/31 职场文书
元宵节晚会主持人串词
2014/03/25 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
债务纠纷起诉书
2015/05/20 职场文书
早恋主题班会
2015/08/14 职场文书
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL
分析Python list操作为什么会错误
2021/11/17 Python