详解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学习 流程控制语句详解
Jun 01 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
Dec 19 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
Jun 09 Python
pandas 快速处理 date_time 日期格式方法
Nov 12 Python
ZABBIX3.2使用python脚本实现监控报表的方法
Jul 02 Python
Django 过滤器汇总及自定义过滤器使用详解
Jul 19 Python
python3调用windows dos命令的例子
Aug 14 Python
Python csv文件的读写操作实例详解
Nov 19 Python
利用python绘制数据曲线图的实现
Apr 09 Python
OpenCV 之按位运算举例解析
Jun 19 Python
Python引入多个模块及包的概念过程解析
Sep 21 Python
python+opencv实现视频抽帧示例代码
Jun 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实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
php格式化时间戳
2016/12/17 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
laravel-admin 实现在指定的相册下添加照片
2019/10/21 PHP
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
js 动态为textbox添加下拉框数据源的方法
2014/04/24 Javascript
jQuery遍历对象、数组、集合实例
2014/11/08 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
基于vue cli 通过命令行传参实现多环境配置
2018/07/12 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
2018/08/08 jQuery
Vue router安装及使用方法解析
2020/12/02 Vue.js
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python内置的字符串处理函数整理
2013/01/29 Python
Python获取当前时间的方法
2014/01/14 Python
详解Python编程中time模块的使用
2015/11/20 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
理肤泉俄罗斯官网:La Roche-Posay俄罗斯
2018/07/24 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
业务经理的岗位职责
2013/11/16 职场文书
社区志愿者心得体会
2014/01/03 职场文书
写给导师的自荐信
2015/03/06 职场文书
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
2021/04/01 PHP
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS