浅谈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服务器拒绝服务攻击代码
Jan 16 Python
python3访问sina首页中文的处理方法
Feb 24 Python
python实现去除下载电影和电视剧文件名中的多余字符的方法
Sep 23 Python
Python字典操作简明总结
Apr 13 Python
Python中文竖排显示的方法
Jul 28 Python
Python利用前序和中序遍历结果重建二叉树的方法
Apr 27 Python
Python模拟脉冲星伪信号频率实例代码
Jan 03 Python
从DataFrame中提取出Series或DataFrame对象的方法
Nov 10 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
Jan 17 Python
Python判断有效的数独算法示例
Feb 23 Python
Python 200行代码实现一个滑动验证码过程详解
Jul 11 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 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
destoon实现调用图文新闻的方法
2014/08/21 PHP
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
php中adodbzip类实例
2014/12/08 PHP
php简单日历函数
2015/10/28 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
2016/08/05 Javascript
Angular2 组件通信的实例代码
2017/06/23 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
JS中的多态实例详解
2017/10/15 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
基于纯JS实现多张图片的懒加载Lazy过程解析
2019/10/14 Javascript
Openlayers实现地图全屏显示
2020/09/28 Javascript
Python中的CURL PycURL使用例子
2014/06/01 Python
windows下python之mysqldb模块安装方法
2017/09/07 Python
python list转置和前后反转的例子
2019/08/26 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
CSS3 实现倒计时效果
2020/11/25 HTML / CSS
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
英国床和浴室商场:Bed & Bath Emporium
2018/05/20 全球购物
学前班教师的自我鉴定
2013/12/05 职场文书
公司前台辞职报告
2014/01/19 职场文书
家长建议怎么写
2014/05/15 职场文书
企业标语大全
2014/07/01 职场文书
工作失职检讨书500字
2014/10/17 职场文书
教师党员个人自我评价
2015/03/04 职场文书
优秀班主任工作总结2015
2015/05/25 职场文书
电工生产实习心得体会
2016/01/22 职场文书
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS