解包运算符

阅读量:

* 和 ** 为 Python 中的解包/打包运算符

运用在函数传参,详见 无关键字参数(args)和有关键字参数(kwargs)

可将列表、元组、集合、字典解构为独立的元素赋值给函数中的参数,但无法直接在表达式右侧使用赋值给左侧的变量

num_list = [1, 2, 3, 4, 5]
print(*num_list)

>>> 1 2 3 4 5

可合并两个列表,或转换类型

num_list1 = [1, 2, 3]
num_list2 = [4, 5, 6]

(*num_list1,*num_list2)
>>> (1, 2, 3, 4, 5, 6)
[*num_list1,*num_list2]
>>> [1, 2, 3, 4, 5, 6]
{*num_list1,*num_list2}
>>> {1, 2, 3, 4, 5, 6}

可用在表达式左侧,接收多个元素打包为列表

first, *middle, last = [1, 2, 3, 4, 5]
print(first, middle, last)

>>> 1 [2, 3, 4] 5

上述例子中,若列表中仅有两个元素,则 middle 为空列表

first, *middle, last = [1, 2]
print(first, middle, last)

>>> 1 [] 2

若仅需要打包元素

*num_list, = 1, 2, 3
print(num_list)

>>> [1, 2, 3]

对字典进行结构时,* 只会结构字典中 key 的列表,而 ** 需要在函数传参的过程中使用。使用 ** 可对两个字典进行拼接

num_dict = {'a': 1, 'b': 2, 'c': 3}
num_dict_2 = {'d': 4, 'e': 5, 'f': 6}
{**num_dict, **num_dict_2}

>>> {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}

#待整理笔记

反向链接

到头儿啦~

局部关系图