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对字典进行排序实例
Sep 25 Python
Python实现的txt文件去重功能示例
Jul 07 Python
对python中的高效迭代器函数详解
Oct 18 Python
pygame游戏之旅 python和pygame安装教程
Nov 20 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
Python实现求两个数组交集的方法示例
Feb 23 Python
Python中super函数用法实例分析
Mar 18 Python
Python小程序之在图片上加入数字的代码
Nov 26 Python
python DataFrame转dict字典过程详解
Dec 26 Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
Oct 22 Python
详解python的内存分配机制
May 10 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中使用Oracle数据库(3)
2006/10/09 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
巧妙破除网页右键禁用的十大绝招
2006/08/12 Javascript
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
js数组操作学习总结
2013/11/04 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
深入理解js generator数据类型
2016/08/16 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
Vue.use源码学习小结
2018/06/20 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
[04:00]DOTA2解说界神雕侠侣 CJ第四天谷子现场过生日
2013/07/30 DOTA
Python编程实现删除VC临时文件及Debug目录的方法
2017/03/22 Python
利用aardio给python编写图形界面
2017/08/21 Python
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
python设计微型小说网站(基于Django+Bootstrap框架)
2019/07/08 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
一款利用html5和css3实现的3D立方体旋转效果教程
2016/04/26 HTML / CSS
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
DELPHI面试题研发笔试试卷
2015/11/08 面试题
大学军训通讯稿
2014/01/13 职场文书
竞聘书怎么写,如何写?
2014/03/31 职场文书
教师作风整改措施思想汇报
2014/10/12 职场文书
大学生见习报告范文
2014/11/03 职场文书
前台接待员岗位职责
2015/04/15 职场文书
法定代表人资格证明书
2015/06/18 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
pytorch中[..., 0]的用法说明
2021/05/20 Python