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实现删除当前目录下除当前脚本以外的文件和文件夹实例
Jul 27 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
Jun 20 Python
python 3.5实现检测路由器流量并写入txt的方法实例
Dec 17 Python
详解python--模拟轮盘抽奖游戏
Apr 12 Python
解决python3 安装不了PIL的问题
Aug 16 Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 Python
Python中实现输入一个整数的案例
May 03 Python
Python实现AES加密,解密的两种方法
Oct 03 Python
如何基于Python pygame实现动画跑马灯
Nov 18 Python
Matplotlib中rcParams使用方法
Jan 05 Python
Python中os模块的简单使用及重命名操作
Apr 17 Python
python源码剖析之PyObject详解
May 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
PHP插入排序实现代码
2013/04/04 PHP
让PHP显示Facebook的粉丝数量方法
2014/01/08 PHP
PHP5.5在windows安装使用memcached服务端的方法
2014/04/16 PHP
php生成excel列名超过26列大于Z时的解决方法
2014/12/29 PHP
PHP实现的文件操作类及文件下载功能示例
2016/12/24 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
IE中的File域无法清空使用jQuery重设File域
2014/04/24 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
js拖拽功能实现代码解析
2016/11/28 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
vuex与组件联合使用的方法
2018/05/10 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
解决iview多表头动态更改列元素发生的错误的方法
2018/11/02 Javascript
详解基于mpvue微信小程序下载远程图片到本地解决思路
2019/05/16 Javascript
javascript实现简易聊天室
2019/07/12 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
2019/10/26 Javascript
Vue 中 a标签上href无法跳转的解决方式
2019/11/12 Javascript
Python编程产生非均匀随机数的几种方法代码分享
2017/12/13 Python
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
杭州信雅达系统.NET工程师面试试题
2015/02/08 面试题
宿舍打麻将检讨书
2014/01/24 职场文书
网上卖盒饭创业计划书
2014/01/26 职场文书
电力公司个人求职信范文
2014/02/04 职场文书
雷人标语集锦
2014/06/19 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
地道战观后感400字
2015/06/04 职场文书
《扇形统计图》教学反思
2016/02/17 职场文书
SpringBoot集成Druid连接池连接MySQL8.0.11
2021/07/02 Java/Android
Javascript之datagrid查询详解
2021/09/15 Javascript