浅谈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语言实现机器学习的K-近邻算法
Jun 11 Python
python使用MySQLdb访问mysql数据库的方法
Aug 03 Python
Python对数据库操作
Mar 28 Python
彻彻底底地理解Python中的编码问题
Oct 15 Python
Python numpy.array()生成相同元素数组的示例
Nov 12 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
Jun 12 Python
Python3离线安装Requests模块问题
Oct 13 Python
使用python 将图片复制到系统剪贴中
Dec 13 Python
Django+boostrap 美化admin后台的操作
Mar 11 Python
python将unicode和str互相转化的实现
May 11 Python
解决virtualenv -p python3 venv报错的问题
Feb 05 Python
Django一小时写出账号密码管理系统
Apr 29 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
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
php异常处理使用示例
2014/02/25 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
php获取linux命令结果的实例
2017/03/13 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
2018/10/10 PHP
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
jQuery解析json数据实例分析
2015/11/24 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
js 自带的sort() 方法全面了解
2016/08/16 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
微信小程序实现图片轮播及文件上传
2017/04/07 Javascript
vue2.0中click点击当前li实现动态切换class
2017/06/21 Javascript
JS非空验证及邮箱验证的实例
2017/08/11 Javascript
vue.js中$set与数组更新方法
2018/03/08 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
2018/10/07 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
2018/10/22 Javascript
layui关闭层级、简单监听的实例
2019/09/06 Javascript
Python自然语言处理 NLTK 库用法入门教程【经典】
2018/06/26 Python
详解Python发送email的三种方式
2018/10/18 Python
python实现根据文件格式分类
2019/10/31 Python
python实现串口通信的示例代码
2020/02/10 Python
django 模型字段设置默认值代码
2020/07/15 Python
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
GoPro摄像机美国官网:美国运动相机厂商
2018/07/03 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
任课老师推荐信范文
2013/11/24 职场文书
打架检讨书400字
2014/01/17 职场文书
黄河的主人教学反思
2014/02/07 职场文书
致跳远运动员加油稿
2014/02/11 职场文书
新学期决心书
2014/03/11 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
强烈推荐:小学生:暑假作息时间表(值得收藏)
2019/07/09 职场文书