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创建只读属性对象的方法(ReadOnlyObject)
Feb 10 Python
python方向键控制上下左右代码
Jan 20 Python
使用python3+xlrd解析Excel的实例
May 04 Python
python3中的md5加密实例
May 29 Python
Python读取excel指定列生成指定sql脚本的方法
Nov 28 Python
Python3解释器知识点总结
Feb 19 Python
Python基于mysql实现学生管理系统
Feb 21 Python
Python匿名函数及应用示例
Apr 09 Python
pandas数据筛选和csv操作的实现方法
Jul 02 Python
Python使用Paramiko控制liunx第三方库
May 20 Python
如何基于Python和Flask编写Prometheus监控
Nov 25 Python
python爬取网页版QQ空间,生成各类图表
Jun 02 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利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
JS锚点的设置与使用方法
2016/09/05 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
JavaScript实现三级级联特效
2017/11/05 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
Python中threading模块join函数用法实例分析
2015/06/04 Python
Python使用爬虫猜密码
2016/02/19 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
深入理解Python异常处理的哲学
2019/02/01 Python
Python匿名函数及应用示例
2019/04/09 Python
安装python及pycharm的教程图解
2019/10/10 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
利用python实现逐步回归
2020/02/24 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
家长给孩子的表扬信
2014/01/17 职场文书
优秀部门获奖感言
2014/02/14 职场文书
工作期间打牌检讨书范文
2014/11/20 职场文书
《小小的船》教学反思
2016/02/18 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
工作一年自我鉴定
2019/06/20 职场文书
gojs实现蚂蚁线动画效果
2022/02/18 Javascript
vue打包时去掉所有的console.log
2022/04/10 Vue.js