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 + openpyxl处理excel2007文档思路以及心得
Jul 14 Python
决策树的python实现方法
Nov 18 Python
django将图片上传数据库后在前端显式的方法
May 25 Python
python删除本地夹里重复文件的方法
Nov 19 Python
python 常用的基础函数
Jul 10 Python
python 构造三维全零数组的方法
Nov 12 Python
Python3实现腾讯云OCR识别
Nov 27 Python
python的依赖管理的实现
May 14 Python
简单了解python中对象的取反运算符
Jul 01 Python
python获取点击的坐标画图形的方法
Jul 09 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
Jul 11 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 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自定义类fsocket模拟post或get请求的方法
2015/07/31 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
PHP迭代器接口Iterator用法分析
2017/12/28 PHP
Javascript 对象的解释
2008/11/24 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
原生Javascript封装的一个AJAX函数分享
2014/10/11 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
浅谈jquery上下滑动的注意事项
2016/10/13 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
vuex 的简单使用
2018/03/22 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
Python中replace方法实例分析
2014/08/20 Python
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
Python实现感知机(PLA)算法
2017/12/20 Python
python re模块findall()函数实例解析
2018/01/19 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
python 数据类型强制转换的总结
2021/01/25 Python
使用CSS3的背景渐变Text Gradient 创建文字颜色渐变
2014/08/19 HTML / CSS
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
俄罗斯三星品牌商店:GalaxyStore
2020/11/04 全球购物
写自荐信有哪些不宜?
2013/10/17 职场文书
孝敬父母的演讲稿
2014/05/14 职场文书
五水共治一句话承诺
2014/05/30 职场文书
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS