Python3.8对可迭代解包的改进及用法详解


Posted in Python onOctober 15, 2019

Python 3 的可迭代解包

在 PEP 3132 - Extended Iterable Unpacking 里面描述了一种对可迭代对象的解包用法,Python 3 可用:

In : a, *b, c = range(5)
In : a, c
Out: (0, 4)
In : b
Out: [1, 2, 3]
In : *a, = range(5)
In : a
Out: [0, 1, 2, 3, 4]
In : for a, *b in [(1, 2, 3), (4, 5, 6, 7)]:
...:   print(b)
...:
[2, 3]
[5, 6, 7]

挺方便的,ES6 也有对应的destructuring assignment语法实现解包数组,不过人家实现的更彻底,还可以解包对象。

不过在 Python 3.2 时引入了一个 BUG。看一个例子:

In : def a():
...:   rest = (4, 5, 6)
...:   t = 1, 2, 3, *rest
...:   return t
...:

In : for i in a():
...:   print(i)
...:

其实这是一个非常简化的写法,要不然需要把 1,2,3 放在一个元组中,再 + rest:

In : (1, 2, 3) + (3, 4, 5, 6)
Out: (1, 2, 3, 4, 5, 6)

但是上面这个例子稍微改一下:

In : def b():
...:   rest = (4, 5, 6)
...:   return 1, 2, 3, *rest
File "<ipython-input-38-b5a7115853e2>", line 3
 return 1, 2, 3, *rest
          ^
SyntaxError: invalid syntax

不用变量 t, 直接返回就会抛 SyntaxError,另外就是 yield (当然要注意 return 和 yield 本身的意见不同啊):

In : def c():
...:   rest = (4, 5, 6)
...:   yield 1, 2, 3, *rest
File "<ipython-input-39-cf6991fcff64>", line 3
 yield 1, 2, 3, *rest
          ^
SyntaxError: invalid syntax
Python 3.8

在 Python 3.8,修复了这个问题:

>>> def b():
...   rest = (4, 5, 6)
...   return 1, 2, 3, *rest
...
>>> for i in b():
...   print(i)
...
>>> def c():
...   rest = (4, 5, 6)
...   yield 1, 2, 3, *rest
...
>>> for i in c():
...   print(i)
...
(1, 2, 3, 4, 5, 6)

你学到了么?

延伸阅读

总结

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

Python 相关文章推荐
Python是编译运行的验证方法
Jan 30 Python
Python制作词云的方法
Jan 03 Python
对pandas中to_dict的用法详解
Jun 05 Python
Flask框架信号用法实例分析
Jul 24 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
Jul 31 Python
python excel转换csv代码实例
Aug 26 Python
python构建指数平滑预测模型示例
Nov 21 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
Python图像处理库PIL的ImageFont模块使用介绍
Feb 26 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
Feb 28 Python
如何利用Python动态模拟太阳系运转
Sep 04 Python
PyQt5 显示超清高分辨率图片的方法
Apr 11 Python
Python 3.8正式发布,来尝鲜这些新特性吧
Oct 15 #Python
Python3安装pip工具的详细步骤
Oct 14 #Python
python区分不同数据类型的方法
Oct 14 #Python
django中瀑布流写法实例代码
Oct 14 #Python
python 中Arduino串口传输数据到电脑并保存至excel表格
Oct 14 #Python
python实现文件批量编码转换及注意事项
Oct 14 #Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 #Python
You might like
PHP+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
用php实现批量查询清除一句话后门的代码
2008/01/20 PHP
解析PHP提交后跳转
2013/06/23 PHP
php生成shtml类用法实例
2014/12/09 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
IE与Firefox在JavaScript上的7个不同写法小结
2009/09/14 Javascript
js 表格隔行颜色
2009/12/02 Javascript
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
Python3实现抓取javascript动态生成的html网页功能示例
2017/08/22 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
详解Python的三种可变参数
2019/05/08 Python
python else语句在循环中的运用详解
2020/07/06 Python
python time()的实例用法
2020/11/03 Python
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
经理秘书找工作求职信
2013/12/19 职场文书
宾馆总经理岗位职责
2014/02/14 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫