解包对应的英文是Unpacking
其实就是把一个容器(列表、元组、集合、字典等)拆开来
1. 解包的方式
- • 赋值符号:
=
- • 星号:
*
或者**
2. 获取容器里面的元素
直接拆开,赋值给多个变量
>>> names = ["mike", "jane", "alex"]
>>> mike, jane, alex = names
>>> mike
'mike'
>>> jane
'jane'
>>> alex
'alex'
函数传参数
当函数有多个位置参数的时候,可以一个一个传入
也可以用解包的方式传参,示例如下:
>>> def add(num1, num2):
... return num1 + num2
...
>>> nums = [1, 2]
>>> add(*nums)
3
2.3 获取部分元素
在获取最值的时候,除了max、min等内置函数
还可以在已经排序好的列表上通过解包的方式来获取最值
>>> max_value, *_, min_value = [6, 5, 4, 3, 2, 1]
>>> max_value
6
>>> min_value
1
_
是一个占位符,在不想写多个变量名、取名字的前提下,可以偷个懒
3. 合并多个容器
- • 列表:直接按照顺序附加上去
>>> a = [1, 2, 3]
>>> b = [2, 4]
>>> [*a, *b]
[1, 2, 3, 2, 4]
- • 元组:和列表表现一致
>>> a = (1, 2, 3)
>>> b = (2, 4)
>>> (*a, *b)
(1, 2, 3, 2, 4)
- • 集合:会进行去重
>>> a = {1, 2, 4}
>>> b = {2, 4}
>>> {*a, *b}
{1, 2, 4}
- • 字典:后面的重复的key的值会覆盖前面同样的key的值
>>> a = {"a": 1, "b": 2, "c": 3}
>>> b = {"b": 3}
>>> {**a, **b}
{'a': 1, 'b': 3, 'c': 3}
用两个**
是针对字典的
但是字典也可以用一个*
来解包,只不过是针对key来解包的
举个例子如下:
>>> a = {"a": 1, "b": 2, "c": 3}
>>> {*a}
{'a', 'b', 'c'}