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动态加载模块的3种方法
Nov 22 Python
Python实现快速排序和插入排序算法及自定义排序的示例
Feb 16 Python
Python实现多线程HTTP下载器示例
Feb 11 Python
python顺序的读取文件夹下名称有序的文件方法
Jul 11 Python
使用Python抓取豆瓣影评数据的方法
Oct 17 Python
python利用requests库模拟post请求时json的使用教程
Dec 07 Python
利用python修改json文件的value方法
Dec 31 Python
python 多线程串行和并行的实例
Feb 22 Python
ipython和python区别详解
Jun 26 Python
Python flask框架post接口调用示例
Jul 03 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
May 24 Python
Python os和os.path模块详情
Apr 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 三维饼图的实现代码
2008/09/28 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
PHP计算日期相差天数实例分析
2016/02/23 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
php+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
基于jquery的二级联动菜单实现代码
2011/04/25 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
jQuery实现自定义checkbox和radio样式
2015/07/13 Javascript
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
使用vue-resource进行数据交互的实例
2017/09/02 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
vue中v-for循环给标签属性赋值的方法
2018/10/18 Javascript
详解在Angular4中使用ng2-baidu-map的方法
2019/06/19 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
Python随机生成一个6位的验证码代码分享
2015/03/24 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
python list格式数据excel导出方法
2018/10/31 Python
详解Python sys.argv使用方法
2019/05/10 Python
Python笔记之代理模式
2019/11/20 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
超市营业员求职简历的自我评价
2013/10/17 职场文书
幼儿园园长岗位职责
2013/11/26 职场文书
装修五一活动策划案
2014/01/23 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
剪彩仪式主持词
2014/03/19 职场文书
标准版离职证明书
2014/09/12 职场文书
毕业论文致谢范文
2015/05/14 职场文书
干部培训工作总结2015
2015/05/25 职场文书