详解Python3序列赋值、序列解包


Posted in Python onMay 14, 2019

上节我们提到解决赋值中等号两边参数不一致的方法可以通过切片,但在Python3中我们可以利用特定的语法更加方便的处理这种情况,如下示例。

当带 * 出现在结尾间时

L = [1, 2, 3, 4, 5]
a, *b = L
print(a, b)

示例结果:

1 [2, 3, 4, 5]

我们可以看到a匹配了列表中第一个元素值,而b匹配了后面所有的内容,并且为列表。即当我们利用带 * 符号匹配时,就可以解决赋值时等号两边元素数量不相等的情形,那么这种带 * 的处理方式都有哪些详细的使用场景和用法呢?

当带 * 出现在中间时

L = [1, 2, 3, 4, 5]
a, *b, c = L
print(a, b, c)

示例结果:

1 [2, 3, 4] 5

即a和c获取了开头和结尾的元素值,而中间所有的元素值都是赋值给了b

当带 * 出现在开头时

L = [1, 2, 3, 4, 5]
*a, b = L
print(a, b)

即b获取了列表结尾的元素值,而开头到末尾但不包含末尾的所有元素值赋值给了a

通用化

类似序列赋值,扩展的序列解法的用法也可以扩展到任何序列类型,比如元组,字符串:

S = 'PYTHON'
a,b,*c = S
print(a,b,c)
a,b,*c = list(S)
print(a,b,c)

示例结果

P Y ['T', 'H', 'O', 'N']
P Y ['T', 'H', 'O', 'N']

即我们可以看到字符串的结果和处理列表非常相似,即和对 list(S) 进行扩展序列解包的结果一致。

一些边界情况

在使用扩展序列解包语法,我们也可能遇到一些极端的情况,比如没有剩下的内容用于匹配带 * 的项,此时该项会被赋值为空列表 [] 。

L = [1, 2, 3, 4]
a, b, c, d, *e = L
1 2 3 4 []

而如果在赋值时出现带多个 * 项,或者只有带 * 的项都会引发错误:

L = [1, 2, 3, 4]
*a, b, *c = L

L = [1, 2, 3, 4]
*a = L

*a, b, *c = L
   ^
SyntaxError: two starred expressions in assignment
  *a = L
  ^
SyntaxError: starred assignment target must be in a list or tuple

总结

以上所述是小编给大家介绍的Python3序列赋值、序列解包,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python解析中国天气网的天气数据
Mar 21 Python
python连接MySQL数据库实例分析
May 12 Python
python控制台中实现进度条功能
Nov 10 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
Python模块搜索路径代码详解
Jan 29 Python
使用pandas批量处理矢量化字符串的实例讲解
Jul 10 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
Aug 21 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
Sep 10 Python
Pytorch 神经网络—自定义数据集上实现教程
Jan 07 Python
python文件和文件夹复制函数
Feb 07 Python
Python实现验证码识别
Jun 15 Python
Python 用__new__方法实现单例的操作
Dec 11 Python
Python实战之制作天气查询软件
May 14 #Python
python中时间模块的基本使用教程
May 14 #Python
使用Python正则表达式操作文本数据的方法
May 14 #Python
Django如何防止定时任务并发浅析
May 14 #Python
python3 pygame实现接小球游戏
May 14 #Python
Django 多环境配置详解
May 14 #Python
python仿evething的文件搜索器实例代码
May 13 #Python
You might like
用PHP和ACCESS写聊天室(十)
2006/10/09 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
php读取文件内容的几种方法详解
2013/06/26 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
2018/11/10 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
用jscript启动sqlserver
2007/06/21 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
jQuery 复合选择器应用的几个例子
2014/09/11 Javascript
jQuery中offsetParent()方法用法实例
2015/01/19 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
Python探索之pLSA实现代码
2017/10/25 Python
Python遍历某目录下的所有文件夹与文件路径
2018/03/15 Python
Python GUI编程完整示例
2019/04/04 Python
Django基础知识 URL路由系统详解
2019/07/18 Python
python处理RSTP视频流过程解析
2020/01/11 Python
Python 如何查找特定类型文件
2020/08/17 Python
CSS类名支持中文命名的示例
2014/04/04 HTML / CSS
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
蛋白质世界:Protein World
2017/11/23 全球购物
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
电大本科自我鉴定
2014/02/05 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
2014年扶贫工作总结
2014/11/18 职场文书
沈阳故宫导游词
2015/01/31 职场文书
捐款仪式主持词
2015/07/04 职场文书
python常见的占位符总结及用法
2021/07/02 Python
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
2022/06/28 Oracle