1. 组包

在Python中,组包的操作是自动完成的,将多个值同时赋给一个变量时,解释器会进行自动组包操作,将多个变量打包成为一个元组

  1. a=1,2,3 #变量a无需提前定义为元组
  2. print(type(a)) #结果为:<class 'tuple'>

2. 拆包

将容器中的多个数据拆出来,分别赋值给多个变量。在Python中任何可迭代对象都支持解包,可迭代对象包括列表、元组、字典、集合、字符串、生成器等实现了next方法的一切对象,但是集合因为是无序的(每次输出元素的顺序不一致),所以一般不使用集合进行拆包。
注意:在某个变量面前加一个星号,而且这个星号可以放在任意变量,每个变量都分配一个元素后,剩下的元素都分配给这个带星号的变量,而且这个变量只能是列表。

  1. a, b, *c = [1, 2, 3, 4]
  2. print(a, b, c)
  3. # 1 2 [3, 4]
  4. a, *b, c = [1, 2, 3, 4]
  5. print(a, b, c)
  6. # 1 [2, 3] 4
  7. a, *b, c = 1, 2, 3, 4
  8. print(a, b, c)
  9. # 1 [2, 3] 4

2.1 列表拆包

  1. a, b, c = [1, 2, 3]
  2. print(a, b, c)
  3. # 1 2 3

2.2 元组拆包

  1. a, b, c = (1, 2, 3)
  2. print(a, b, c)
  3. # 1 2 3

2.3 字符串拆包

  1. a, b, c = "abc"
  2. print(a, b, c)
  3. # a b c

2.4 字典拆包

  1. a, b, c = {"a": 1, "b": 2, "c": 3}
  2. print(a, b, c)
  3. # a b c

字典解包后,只会把字典的key取出来,value 则丢掉了。

3. 组包与拆包的应用

3.1 多变量赋值

  1. a, b = 1, 2 # 这一步进行了组包与拆包过程
  2. print(a, b)
  3. # 1 2

3.2 变量交换

  1. a, b = 1, 2
  2. a, b = b, a
  3. print(a, b)
  4. # 2 1

3.3 函数可变参数的拆包与组包

*变量名:将元组拆包,将元素组包成元组,只能是元组
**变量名:拆分/汇集关键字参数

  1. def func(*args,**kwargs): # args,kwargs只是习惯叫法,可以换成其他名字
  2. """
  3. *args:调用函数时,接受任意个位置参数,组包成一个元组赋值给args
  4. **kwargs:调用函数时,接受任意个关键字参数(以 “参数名 = 参数值” 的形式传递的参数),组包成一个字典赋值给kwargs
  5. """
  6. pass