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中的条件判断语句
May 14 Python
Python3写入文件常用方法实例分析
May 22 Python
python动态加载包的方法小结
Apr 18 Python
python的dataframe和matrix的互换方法
Apr 11 Python
python实现字符串中字符分类及个数统计
Sep 28 Python
解决python3中cv2读取中文路径的问题
Dec 05 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
python读取指定字节长度的文本方法
Aug 27 Python
Pytorch实现各种2d卷积示例
Dec 30 Python
Python编程快速上手——Excel表格创建乘法表案例分析
Feb 28 Python
python中@property的作用和getter setter的解释
Dec 22 Python
python 判断文件或文件夹是否存在
Mar 18 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
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
删除数组元素实用的PHP数组函数
2008/08/18 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
2013/11/13 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
Javascript计算时间差的函数分享
2011/07/04 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
vue父组件中获取子组件中的数据(实例讲解)
2017/09/27 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
js的对象与函数详解
2019/01/21 Javascript
[05:10]2014DOTA2国际邀请赛 通往胜利之匙赛场探秘之旅
2014/07/18 DOTA
Python运用于数据分析的简单教程
2015/03/27 Python
python发送邮件实例分享
2017/07/28 Python
Django项目中用JS实现加载子页面并传值的方法
2018/05/28 Python
python调用百度语音REST API
2018/08/30 Python
喜诗官方在线巧克力店:See’s Candies
2017/01/01 全球购物
三年级学生评语
2014/04/23 职场文书
班长演讲稿范文
2014/04/24 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers