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实现的金山快盘的签到程序
Jan 17 Python
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 Python
Python中的进程分支fork和exec详解
Apr 11 Python
Python中实现参数类型检查的简单方法
Apr 21 Python
Python实现字典(dict)的迭代操作示例
Jun 05 Python
python 返回列表中某个值的索引方法
Nov 07 Python
Python如何实现强制数据类型转换
Nov 22 Python
python与mysql数据库交互的实现
Jan 06 Python
python打包生成so文件的实现
Oct 30 Python
详解Python中的文件操作
Jan 14 Python
用python制作个音乐下载器
Jan 30 Python
Python调用SMTP服务自动发送Email的实现步骤
Feb 07 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
迅雷下载《中学科技》怀旧期刊下载
2021/02/27 无线电
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
用于table内容排序
2006/07/21 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
jquery中ajax学习笔记3
2011/10/16 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
对frameset、frame、iframe的js操作示例代码
2013/08/16 Javascript
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
Js 获取、判断浏览器版本信息的简单方法
2016/08/08 Javascript
JS中用EL表达式获取上下文参数值的方法
2018/03/28 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python读写Redis数据库操作示例
2014/03/18 Python
Windows8下安装Python的BeautifulSoup
2015/01/22 Python
使用python实现rsa算法代码
2016/02/17 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
解读! Python在人工智能中的作用
2017/11/14 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
经济信息管理专业大学生求职信
2013/09/27 职场文书
委托书的样本
2015/01/28 职场文书
雨花台导游词
2015/02/06 职场文书
于丹讲座视频观后感
2015/06/15 职场文书
2016情人节宣传语
2015/07/14 职场文书
销售会议开幕词
2016/03/04 职场文书