1. 组包
在Python中,组包的操作是自动完成的,将多个值同时赋给一个变量时,解释器会进行自动组包操作,将多个变量打包成为一个元组。
a=1,2,3 #变量a无需提前定义为元组
print(type(a)) #结果为:<class 'tuple'>
2. 拆包
将容器中的多个数据拆出来,分别赋值给多个变量。在Python中任何可迭代对象都支持解包,可迭代对象包括列表、元组、字典、集合、字符串、生成器等实现了next方法的一切对象,但是集合因为是无序的(每次输出元素的顺序不一致),所以一般不使用集合进行拆包。
注意:在某个变量面前加一个星号,而且这个星号可以放在任意变量,每个变量都分配一个元素后,剩下的元素都分配给这个带星号的变量,而且这个变量只能是列表。
a, b, *c = [1, 2, 3, 4]
print(a, b, c)
# 1 2 [3, 4]
a, *b, c = [1, 2, 3, 4]
print(a, b, c)
# 1 [2, 3] 4
a, *b, c = (1, 2, 3, 4)
print(a, b, c)
# 1 [2, 3] 4
2.1 列表拆包
a, b, c = [1, 2, 3]
print(a, b, c)
# 1 2 3
2.2 元组拆包
a, b, c = (1, 2, 3)
print(a, b, c)
# 1 2 3
2.3 字符串拆包
a, b, c = "abc"
print(a, b, c)
# a b c
2.4 字典拆包
a, b, c = {"a": 1, "b": 2, "c": 3}
print(a, b, c)
# a b c
字典解包后,只会把字典的key取出来,value 则丢掉了。
3. 组包与拆包的应用
3.1 多变量赋值
a, b = 1, 2 # 这一步进行了组包与拆包过程
print(a, b)
# 1 2
3.2 变量交换
a, b = 1, 2
a, b = b, a
print(a, b)
# 2 1
3.3 函数可变参数的拆包与组包
*变量名:将元组拆包,将元素组包成元组,只能是元组
**变量名:拆分/汇集关键字参数
def func(*args,**kwargs): # args,kwargs只是习惯叫法,可以换成其他名字
"""
*args:调用函数时,接受任意个位置参数,组包成一个元组赋值给args
**kwargs:调用函数时,接受任意个关键字参数(以 “参数名 = 参数值” 的形式传递的参数),组包成一个字典赋值给kwargs
"""
pass