Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。
Python 3.5增加了对PEP 448中unpack泛化的更多支持。根据PEP,它增加了* 序列unpack运算符的扩展用法和**字典unpack运算符,以允许在更多位置,任意次数和在其他情况下unpack。这意味着我们现在可以调用具有任意数量的unpack函数。让我们来看看一个dict()例子:
有趣的是,如果key不是字符串,unpack不工作:
更新:我的一个读者很快指出,这不起作用的原因是因为我试图unpack成一个函数调用(即dict())。如果我使用只是dict语法解压缩,整数键将工作正常。我的意思表达如下:
另一个有趣的变化是dict unpack后面的值将永远覆盖先前的。在PEP中有一个很好的例子,证明了这一点:
我认为这是很整洁。你可以使用ChainMap从collections模块做同样的事情,但这种方法更加简单一点。
然而,这个新的unpack也适用于元组和列表。让我们尝试将不同类型的一些项目组合成一个列表:
在这次unpack更新之前,你需要这样做:
我认为在这些情况下新的语法实际上是非常方便的。我实际上在Python 2遇到了这种情况一两次,这个新增功能将是非常有用的。
总结
在PEP 448中有很多其他的例子,在Python的解释器中阅读和尝试是非常有趣的。 我强烈建议看看它,并且试一试。 我希望当我们最终迁移到Python 3时在我的新代码中开始使用这些功能。英文原文:http://www.blog.pythonlibrary.org/2017/02/21/python-3-unpacking-generalizations/
译者:shizhaou