浅谈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小程序
Aug 15 Python
深入解析Python中函数的参数与作用域
Mar 20 Python
DataFrame中去除指定列为空的行方法
Apr 08 Python
将TensorFlow的模型网络导出为单个文件的方法
Apr 23 Python
Tensorflow卷积神经网络实例进阶
May 24 Python
Python中format()格式输出全解
Apr 12 Python
详解pyppeteer(python版puppeteer)基本使用
Jun 12 Python
Python中使用双下划线防止类属性被覆盖问题
Jun 27 Python
python orm 框架中sqlalchemy用法实例详解
Feb 02 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
Jul 14 Python
python logging模块的使用
Sep 07 Python
python 实现Requests发送带cookies的请求
Feb 08 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 self与$this的详解
2013/06/08 PHP
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
jQuery Autocomplete自动完成插件
2010/07/17 Javascript
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
vue中v-for循环给标签属性赋值的方法
2018/10/18 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
python操作日期和时间的方法
2014/03/11 Python
Python编写生成验证码的脚本的教程
2015/05/04 Python
在Python的Django框架中创建和使用模版
2015/07/15 Python
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
python Django的web开发实例(入门)
2019/07/31 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
全球在线商店:BerryLook
2019/04/14 全球购物
旅游管理实习自我鉴定
2013/09/29 职场文书
俄语翻译实习生的自我评价分享
2013/11/06 职场文书
大学四年规划书范文
2013/12/27 职场文书
大学生学习党课思想汇报
2014/01/03 职场文书
医生进修自我鉴定
2014/01/19 职场文书
《一件运动衫》教学反思
2014/02/19 职场文书
合伙经营协议书
2014/04/18 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
禁毒主题班会教案
2015/08/14 职场文书
保险公司增员口号
2015/12/25 职场文书
2019年房屋委托租赁合同范本(通用版)!
2019/07/17 职场文书
导游词之青城山景区
2019/09/27 职场文书
Hive导入csv文件示例
2022/06/25 数据库