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批量同步web服务器代码核心程序
Sep 01 Python
python获得两个数组交集、并集、差集的方法
Mar 27 Python
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
Python 通配符删除文件的实例
Apr 24 Python
Python实现绘制双柱状图并显示数值功能示例
Jun 23 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
python连接、操作mongodb数据库的方法实例详解
Sep 11 Python
python3连接kafka模块pykafka生产者简单封装代码
Dec 23 Python
浅谈Python中的字符串
Jun 10 Python
Python爬虫爬取糗事百科段子实例分享
Jul 31 Python
详解Django ORM引发的数据库N+1性能问题
Oct 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
使用php4加速网络传输
2006/10/09 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
JavaScript操作XML 使用百度RSS作为新闻源示例
2012/02/17 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
JavaScript将取代AppleScript?
2014/09/18 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
layui导航栏实现代码
2017/05/19 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
如何封装Vue Element的table表格组件
2021/02/06 Vue.js
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
Python中自定义函数的教程
2015/04/27 Python
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
python不换行之end=与逗号的意思及用途
2017/11/21 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
python钉钉机器人运维脚本监控实例
2019/02/20 Python
python django生成迁移文件的实例
2019/08/31 Python
python 字符串常用方法汇总详解
2019/09/16 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
新教师个人总结
2015/02/06 职场文书
推荐信范文大全
2015/03/27 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS
SQL实现LeetCode(175.联合两表)
2021/08/04 MySQL
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js