PEP-448选摘:Additional Unpacking Generalizations(附加的解包操作推广)
来源:互联网 发布:bioedit软件下载 编辑:程序博客网 时间:2024/06/05 10:10
PEP-448 提议扩宽对*
可迭代对象(iterable)解包操作符(unpacking operator)和**
字典(dictionary)对象解包操作符的使用限制,使得它们可以出现在更多的地方,更多的情景,而且没有使用次数限制。
该提案分别介绍了在元组(tuple),列表(list),集合(set),字典(dictionary)的对应陈列式(display)的用例:
元组陈列式
>>> *range(4), 4
(0, 1, 2, 3, 4)
列表陈列式
>>> [*range(4), 4]
[0, 1, 2, 3, 4]
集合陈列式
>>> {*range(4), 4}
{0, 1, 2, 3, 4}
字典陈列式
>>> {'x': 1, **{'y': 2}}
{'x': 1, 'y': 2}
并且提到在字典中,后来的值总是覆盖(override)先前的值:
>>> {'x': 1, **{'x': 2}}
{'x': 2}
>>> {**{'x': 2}, 'x': 1}
{'x': 1}
在该提案中没有对解包操作符在解析式(comprehension)中的使用说明,笔者尝试用Python 3.5.2
的解释器进行试验,结果显示在解析式中,两种解包操作符均不被支持。
在该提案的规范(specification)部分,介绍了解包操作在函数调用中的使用情况。
Function calls may accept an unbounded number of * and * unpackings. There will be no restriction of the order of positional arguments with relation to unpackings nor any restriction of the order of keyword arguments with relation to ** unpackings.
Function calls continue to have the restriction that keyword arguments must follow positional arguments and * unpackings must additionally follow unpackings.
翻译成中文就是:函数调用可以接受不限数量的*
和**
解包操作。*
解包相对于位置参数的位置顺序没有限制,**
解包相对于关键字参数的位置顺序也没有限制。函数调用依然限制关键字参数必须跟在位置参数后面,**
解包必须跟在*
解包后面。
函数调用时的形式限制如下:
function(
argument or *args, argument or *args, ...,
kwargument or *args, kwargument or *args, ...,
kwargument or **kwargs, kwargument or **kwargs, ...
)
最后需要特别注意的是:*elements, = iterable
和elements = *iterable,
两个式子中,elements
的类型不一样,前式中它的类型为列表,后式中为元组。
到这里,PEP-488的重点都介绍完了,现在把这些重点都罗列出来:
- 元组陈列式,列表陈列式,集合陈列式,字典陈列式都支持解包操作
- 解析式不支持解包操作
- 函数调用支持解包操作,
**
解包必须出现在*
解包的位置后面,同时,关键字参数必须出现在位置参数的位置后面 *elements, = iterable
和elements = *iterable,
两个式子中elements
的类型不一样,前式中它的类型为列表,后式中为元组。
- PEP-448选摘:Additional Unpacking Generalizations(附加的解包操作推广)
- PEP-3132选摘:Extended Iterable Unpacking(扩展的可迭代对象解包)
- 26 附加组件【Additional Components】
- PEP 333 (不是3333)的翻译
- 关于VS的操作:Additional Include directories、Additional Library directories、Addition
- additional
- Additional Named Entities for HTML HTML附加命名实体
- chapter 12(additional) 类的私有成员输出
- 额外的类路径(Additional Class Paths)
- Additional package repositories 第三方包资源
- Python代码的PEP 8标准
- PEP 343: Python的with语句
- 一个操作数据库的类(备份,还原,分离,附加,添加删除用户等操作)
- Java Int unpacking(分解)packing
- 论证是一门学问 如何让你的观点有说服力-7 概括 Generalizations
- Day26、文件操作(write)、文件的附加属性、文件重定向、mmap映射文件
- 【转载苏飞的博客】一个操作数据库的类(备份,还原,分离,附加,添加删除用户等操作)
- 隐藏层加监督(feature matching)的代码书写方法---- 附加optim包的功能再看。
- 编译caffe源码时,make runtest问题解决方案:[ FAILED ] NesterovSolverTest/0.TestSnapshotShare, where TypeParam =
- 动态生成IRecyclerviewe
- 用户登录验证
- 左移右移小总结
- Android开发入门经典实例
- PEP-448选摘:Additional Unpacking Generalizations(附加的解包操作推广)
- XML基础(二)
- 数据结构——图—图的遍历
- Phinecos(洞庭散人) 专注于开源技术的研究与应用 基于MFC的OpenGL绘图
- RxJava的理解
- android 学习之 EventBus 源码初析
- No mapping found for HTTP request with URI in DispatcherServlet with name 'XXX'
- leetcode:75. Sort Colors
- 矩阵中的路径