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 09 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
May 08 Python
初学python的操作难点总结(新手必看篇)
Aug 03 Python
python实现远程通过网络邮件控制计算机重启或关机
Feb 22 Python
python 利用for循环 保存多个图像或者文件的实例
Nov 09 Python
Python中dict和set的用法讲解
Mar 28 Python
python django 原生sql 获取数据的例子
Aug 14 Python
浅析python内置模块collections
Nov 15 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
Jan 14 Python
Python chardet库识别编码原理解析
Feb 18 Python
python def 定义函数,调用函数方式
Jun 02 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 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 压缩文件夹的类代码
2009/11/05 PHP
初品cakephp 入门基础
2012/02/16 PHP
PHP实现股票趋势图和柱形图
2015/02/07 PHP
PHP实现简单实用的验证码类
2015/07/29 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
JavaScript Math.ceil() 函数使用介绍
2013/12/11 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
JavaScript运行原理分析
2018/02/09 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
angular2 NgModel模块的具体使用方法
2019/04/10 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
2015/11/04 Python
使用Python读取安卓手机的屏幕分辨率方法
2018/03/31 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
Python的两道面试题
2013/06/29 面试题
酒店节能降耗方案
2014/05/08 职场文书
应用外语系自荐信
2014/06/26 职场文书
大学生就业协议书范本(适用于公司企业)
2014/10/07 职场文书
客房部经理岗位职责
2015/02/02 职场文书
大学生团员个人总结
2015/02/14 职场文书
企业计划生育责任书
2015/05/09 职场文书
解决golang post文件时Content-Type出现的问题
2021/05/02 Golang