解包在英文里叫做 Unpacking,就是将容器里面的元素逐个取出来放在其它地方
>>> a, b, c = [1,2,3]
如果列表中有3个元素,那么刚好如果列表中有3个元素,那么刚好可以分配给3个变量。除了列表对象可以解包之外,任何可迭代对象都支持解包,可迭代对象包括元组、字典、集合、字符串、生成器等实现了__next__方法的一切对象。
元组解包
字符串解包
字典解包
字典解包后,只会把字典的 key 取出来,value 则丢掉了。
你可能见过多变量赋值操作,本质上也是自动解包过程,等号右边其实是一个元组对象 (1, 2),有时候我们代码不小心多了一个逗号 ,,就变成了元组对象
所以写代码的时候需要特别注意。在Python 中,交换两个变量非常方便,本质上也是自动解包过程。
如果在解包过程中,遇到左边变量个数小于右边可迭代对象中元素的个数时该怎么办? 好比你们家有3口人,你老婆却买了4个苹果,怎么分配呢?
在Python2中,如果等号左边变量的个数不等于右边可迭代对象中元素的个数,是不允许解包的。但在 Python3 可以这么做了。这个特性可以在 PEP 3132 中看到。
这种语法就是在某个变量面前加一个星号,而且这个星号可以放在任意变量,每个变量都分配一个元素后,剩下的元素都分配给这个带星号的变量
自动解包支持一切可迭代对象
python3中,开始支持更高级的解包操作,用星号操作使得等号左边的变量个数可以少于右边迭代对象中元素的个数。
函数调用时,可以用 * 或者 ** 解包可迭代对象
python3.5,函数调用和表达式中可支持更多的解包参数。
领取专属 10元无门槛券
私享最新 技术干货