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模块restful使用方法实例
Dec 10 Python
python将图片文件转换成base64编码的方法
Mar 14 Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
python 删除非空文件夹的实例
Apr 26 Python
python单例模式实例解析
Aug 28 Python
Python实现剪刀石头布小游戏(与电脑对战)
Dec 31 Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 Python
Python常用数据分析模块原理解析
Jul 20 Python
Python JSON常用编解码方法代码实例
Sep 05 Python
使用Python实现音频双通道分离
Dec 25 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
用缓存实现静态页面的测试
2006/12/06 PHP
php foreach 参数强制类型转换的问题
2010/12/10 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
JavaScript 动态创建VML的方法
2009/10/14 Javascript
ExtJs的Date格式字符代码
2010/12/30 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
jQuery实现购物车数字加减效果
2015/03/14 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
2019/05/31 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
Python实现分割文件及合并文件的方法
2015/07/10 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
PyCharm代码格式调整方法
2018/05/23 Python
Python标准库shutil用法实例详解
2018/08/13 Python
Python超越函数积分运算以及绘图实现代码
2019/11/20 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
一些.net面试题
2014/10/06 面试题
买房委托公证书
2014/04/08 职场文书
关于奉献的演讲稿
2014/05/21 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
导游词之河北白洋淀
2020/01/15 职场文书
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技