python的星号操作符和双星号操作符


*   迭代器解包操作,也称之为序列拆分操作符


** 字典解包操作,也称之为映射拆分操作。作为关键字参数传递给函数。


使用 *和 ** 的解包的好处是能节省代码量,使得代码看起来更优雅。


解包在英文里叫做 Unpacking,就是将容器里面的元素逐个取出来Python 中的解包是自动完成的,例如:




*,迭代器解包,序列拆分 操作符


** 字典接包操作,也称之音社拆分操作。作为关键字参数传递给函数。






任何可迭代对象都支持解包,可迭代对象包括元组、字典、集合、字符串、生成器等实现了__next__方法的一切对象。




字典解包的结果是key,value丢掉




多变量的赋值与交换,本质上也是自动解包过程

比如a, b = 1, 2



如果在解包过程中,遇到左边变量个数小于右边可迭代对象中元素的个数时该怎么办? 好比你们家有3口人,你老婆却买了4个苹果,怎么分配呢?


在 Python2 中,如果等号左边变量的个数不等于右边可迭代对象中元素的个数,是不允许解包的。但在 Python3 可以这么做了。






a, b, *c = [1,2,3,4]

a = 1

b = 2

c = [3,4]


a, *b, c = [1,2,3,4]

a = 1

b = [2,3]

c = 4

这种语法就是在某个变量面前加一个星号,而且这个星号可以放在任意变量,每个变量都分配一个元素后,剩下的元素都分配给这个带星号的变量



比如上面例子,在 Python2 中该怎么操作呢?

a, b, c = n[0], n[1:-1], n[-1] # 使用切片操作