Python3.8对可迭代解包的改进及用法详解
作者:小明明 发布时间:2021-01-08 05:55:05
标签:Python3.8,迭代,解包
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对可迭代解包的改进及用法详解,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://www.dongwm.com/post/iterable-unpacking/
0
投稿
猜你喜欢
- 1、解压到想要安装的位置,创建my.ini文件my.ini的内容如下[mysql]# 设置mysql客户端默认字符集default-char
- 什么是接口型函数?顾名思义接口函数指的是用函数实现接口,这样在调用的时候就会非常简便,这种方式适用于只有一个函数的接口。这里以迭代一个map
- /**//// <summary> /// 生成带CDATA的节点 /// </summary> /// <p
- //********************** index.asp ************************//<
- python 远程统计文件#!/usr/bin/python#encoding=utf-8import timeimport osimpor
- function getExplorerInfo() { var explorer = window.navigator.user
- 技巧问题 Mysql的远程连接出现"Lost connection to MySQL server during query&qu
- 这段时间我一直在说设计需要有层次感,这种层次感可能有很多类型,比如色彩的层次感,或是元素的层次感。当一个设计缺乏层次感的时候页面所表现出来的
- 原文网址:gradio.app/sharing-you…1.分享演示share=True通过在方法中设置,可以轻松公开
- 1、爬取网页分析爬取的目标网址为:https://www.gushiwen.cn/在登陆界面需要做的工作有,获取验证码图片,并识别该验证码,
- 前置从https://studygolang.com/dl下载go1.14.6.windows-amd64.msi安装即可,安装路径选择默认
- 是扫盲文章, 其实我自己就是个被扫对象, 为了学习W3C标准地设计网页, 想到写这个系列的文章当作自己的学习笔记, 不求每篇都写很好, 只求
- 前言2048游戏规则:简单的移动方向键让数字叠加,并且获得这些数字每次叠加后的得分,当出现2048这个数字时游戏胜利。同时每次移动方向键时,
- 一、摘要Python使用被称为异常 的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。
- 一、前置知识1.1 语料库(Corpus)太长不看版: NLP任务所依赖的语言数据称为语料库。详细介绍版: 语料库(Corpus,复数是Co
- 基于 Snapchat 的增强现实胡子挂件融合第一个项目中,我们将在检测到的脸上覆盖了一个小胡子。我们可以使用从摄像头捕获的连续视频帧,也可
- 论坛有人问起如何获取读取CSS属性值,就写了下面这段兼容各浏览器的获取HTML元素的css属性值函数:function getSt
- 数据库中有user表如下:新建一个Django项目:django-admin.py startproject myDjango<pro
- 1.导入matplotlib.pylab和numpy包import matplotlib.pylab as pltimport numpy
- 前言2015年,HTTP/2 发布,直到2021年公司的项目才开始在实践中应用;自己对http2诸多特点的理解只存在于字面上,于是尝试在no