浅谈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显示进度条的方法
Sep 20 Python
Python RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
深入浅析python中的多进程、多线程、协程
Jun 22 Python
Python3 循环语句(for、while、break、range等)
Nov 20 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
python交换两个变量的值方法
Jan 12 Python
Python实现的爬取小说爬虫功能示例
Mar 30 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 Python
使用python实现飞机大战游戏
Mar 23 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
python 视频下载神器(you-get)的具体使用
Jan 06 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 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
PHP:风雨欲来 路在何方?
2006/10/09 PHP
php 静态变量的初始化
2009/11/15 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
PHP批量生成图片缩略图的方法
2015/06/18 PHP
php cli配置文件问题分析
2015/10/15 PHP
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
屏蔽F1~F12的快捷键的js函数
2010/05/06 Javascript
密码强度检测效果实现原理与代码
2013/01/04 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
jQuery实现个性翻牌效果导航菜单的方法
2015/03/09 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
2018/02/21 Python
python实现名片管理器的示例代码
2019/12/17 Python
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
出纳工作岗位责任制
2014/02/02 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
青年文明号汇报材料
2014/12/23 职场文书
初中教师个人工作总结
2015/02/10 职场文书
试用期自我评价怎么写
2015/03/10 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python
JS前端可扩展的低代码UI框架Sunmao使用详解
2022/07/23 Javascript