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 相关文章推荐
haskell实现多线程服务器实例代码
Nov 26 Python
仅用50行Python代码实现一个简单的代理服务器
Apr 08 Python
使用Python编写一个模仿CPU工作的程序
Apr 16 Python
python获取元素在数组中索引号的方法
Jul 15 Python
深入理解Python3中的http.client模块
Mar 29 Python
python的文件操作方法汇总
Nov 10 Python
详解Django之auth模块(用户认证)
Apr 17 Python
Python闭包函数定义与用法分析
Jul 20 Python
linux查找当前python解释器的位置方法
Feb 20 Python
python+mysql实现个人论文管理系统
Oct 25 Python
python求最大公约数和最小公倍数的简单方法
Feb 13 Python
基于pycharm实现批量修改变量名
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
基于mysql的论坛(3)
2006/10/09 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
在Laravel 中实现是否关注的示例
2019/10/22 PHP
JS替换文本域内的回车示例
2014/02/18 Javascript
JavaScript判断变量是对象还是数组的方法
2014/08/28 Javascript
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
javascript的BOM汇总
2015/07/16 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
jQuery内容选择器与表单选择器实例分析
2019/06/28 jQuery
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
Python中的defaultdict模块和namedtuple模块的简单入门指南
2015/04/01 Python
Python Paramiko模块的安装与使用详解
2016/11/18 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
Django 用户认证组件使用详解
2019/07/23 Python
python列表推导式入门学习解析
2019/12/02 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
python logging模块的使用详解
2020/10/23 Python
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
介绍一下Make? 为什么使用make
2013/12/08 面试题
自我评价如何写好?
2014/01/05 职场文书
贸易经济专业自荐书
2014/06/29 职场文书
在职证明书模板
2015/06/15 职场文书
在职证明格式样本
2015/06/15 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫