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 "", 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 "", 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对可迭代解包的改进及用法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

python3.8的用法_Python3.8对可迭代解包的改进及用法详解相关推荐

  1. pythonbyte连接_Python3之字节串bytes与字节数组bytearray的使用详解

    字节串bytes 字节串也叫字节序列,是不可变的序列,存储以字节为单位的数据 字节串表示方法: b"ABCD" b"\x41\x42" ... 字节串的构造函数 ...

  2. mysql回滚用法_Mysql误操作后利用binlog2sql快速回滚的方法详解

    前言 在日常工作或者学习中,操作数据库时候难免会因为"大意"而误操作,需要快速恢复的话通过备份来恢复是不太可能的,下面这篇文章主要给大家介绍关于Mysql误操作后利用binlog2 ...

  3. control的用法及短语_九上U5(control)微课详解与精练

    ◆◆视频讲解◆◆ (译林牛津 | 九上U5重点词汇 control) ◆◆例题解析◆◆1. 单选题: The business is said to be          of a director ...

  4. python3 rsa加密_python3产生RSA秘钥对并执行加解密操作详解

    加密使用的是公钥对数据进行加密,而且当你使用一把1024bit的rsa公钥的时候,你一次只能加密最多117byte的数据,如果数据量超过这个数,可能会涉及到对数据进行分段加密的问题.而且现在rsa 1 ...

  5. python3中datetime库,time库以及pandas中的时间函数区别与详解

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  6. mysql中的自关联详解_Laravel - MySQL数据库的使用详解6(Eloquent ORM用法3:模型关联、关联查询)...

    一.一对一关联 一对一关联是很基本的关联.假设一个 User 对应到一个 Phone,phones 表结构如下(通过 user_id 关联 user 表的主键): 1,定义一对一关联 (1)User ...

  7. python学法用法 自动刷分_微信跳一跳python辅助工具刷分教程详解

    随着身边不少小伙伴都加入了微信跳一跳挑战,朋友圈最近都被刷爆了,为了刷分,很多小伙伴都开始开挂了,Github大神wangshub分享了一个针对该游戏的开源项目,那微信跳一跳python怎么刷分呢,下 ...

  8. c语言中常量有何作用,C语言const的用法详解,C语言常量定义详解

    有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定.例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小.为了满足这一要求,可以使用const关键字对变量加以限定: co ...

  9. python3两个三阶矩阵相乘公式_python的几种矩阵相乘的公式详解

    1. 同线性代数中矩阵乘法的定义: np.dot() np.dot(A, B):对于二维矩阵,计算真正意义上的矩阵乘积,同线性代数中矩阵乘法的定义.对于一维矩阵,计算两者的内积.见如下Python代码 ...

  10. 第十章 结构体_C语言const的用法详解,C语言常量定义详解

    有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定.例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小.为了满足这一要求,可以使用const关键字对变量加以限定: 这样 ...

最新文章

  1. CodeGen用户定义的扩展令牌
  2. [Android1.5]DigitalClock自定义日期输出格式
  3. win32线程学习总结(临界区,互斥体,事件,信号量)
  4. RxJava 参考文档
  5. IDEA中双击两下shift全局搜索怎样取消和修改
  6. 【JavaEE企业应用实战学习记录】struts配置文件详细解析
  7. Java 8中的功能接口是什么? @功能注释和示例
  8. 图片上传下载连接云服务器tomcat
  9. 互联网金融盯上房地产资金饥渴症
  10. 基于三层结构的CRM系统(Agent X)的设计和开发
  11. mysql语句中的注释方法_MySQL语句注释方式简介
  12. NSA方程式工具利用与分析
  13. 如何使用hMailServer+云服务器搭建个人邮箱
  14. android app启动动画效果,Android 启动页优化及过渡动画
  15. 基于Android Studio的安卓课程设计(Keep运动软件)
  16. 华为测试 称砝码
  17. 采购订单历史表EKBE和物料凭证表MSEG的关系
  18. 从私服下载 jar包
  19. spring中的loc和aop
  20. (转载文章)程序员的常见健康问题

热门文章

  1. 服务器的运行速度突然变慢的原因一般有如下几个方面:
  2. 40. HTTP 协议(1)
  3. 桌面有u盘符计算机里没有了,教你电脑不显示u盘盘符怎么办
  4. 电压放大倍数公式运放_三点出发,学习运算放大器不再“犯难”
  5. Django 学习第九天——请求与响应
  6. asp.net Checkbox 绑定自定义属性
  7. mac 下 sublime text 运行c++/c 不能使用scanf/cin
  8. 认识![CDATA[ ]]
  9. 对application/x-www-form-urlencoded、multipart/form-data和text/plain的认识
  10. jenkins安装与自动部署详细说明