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 相关文章推荐
windows下Python实现将pdf文件转化为png格式图片的方法
Jul 21 Python
Python开发的HTTP库requests详解
Aug 29 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
Feb 05 Python
解决python 无法加载downsample模型的问题
Oct 25 Python
神经网络相关之基础概念的讲解
Dec 29 Python
python实现电子产品商店
Feb 26 Python
Python3最长回文子串算法示例
Mar 04 Python
Falsk 与 Django 过滤器的使用与区别详解
Jun 04 Python
python实现微信自动回复机器人功能
Jul 11 Python
pytorch 常用线性函数详解
Jan 15 Python
python脚本框架webpy模板控制结构
Nov 20 Python
python多线程方法详解
Jan 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
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
利用javascript查看html源文件
2006/11/08 Javascript
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
JavaScript中创建对象和继承示例解读
2014/02/12 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
Nodejs获取网络数据并生成Excel表格
2020/03/31 NodeJs
微信小程序 location API接口详解及实例代码
2016/10/12 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
[01:01:43]EG vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Python中单、双下划线的区别总结
2017/12/01 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
Django实现文章详情页面跳转代码实例
2020/09/16 Python
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
戴森英国官网:Dyson英国
2019/05/07 全球购物
解决python 输出到csv 出现多空行的情况
2021/03/24 Python
毕业自我鉴定怎么写
2014/03/25 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
护士医德考评自我评价
2015/03/03 职场文书
项目投资意向书范本
2015/05/09 职场文书
圣诞晚会主持词
2015/07/01 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
MySQL5.7并行复制原理及实现
2021/06/03 MySQL
react中的DOM操作实现
2021/06/30 Javascript
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS