对于可迭代对象,如元组、列表、字符串、集合、字典这些可迭代对象都可以被拆包,拆包是指将一个结构中的数据拆分为多个单独变量中。拆包的方式大致有两种,一种是以变量的方式来接收,另一种是用‘*’号。下面先讲第一种方式。
以变量的方式接收一定要注意左右两边元素的个数和变量个数要统一,不然会报错。先以一个元组为例,如下一个元组:
a = ('computer',2,8000,(2018,10,16))
这个元组的意思是一个人买了两台电脑,一台8000人名币,于2018年10月16日购买。
如果我们仅以两个变量来接收的话,看看会怎样?
现在我们用四个变量来接受这个元组,将其数据拆成一个个单独的数据。
如果我们只想获取其价格和购买日期,前面两个元素我们可以用一个变量来接受,这个变量由通配符构成。
很明显,一个通配符构成的变量可以替代前面的两个变量,但其本身没有什么意义,故在交互模式下直接输入*_会报错。通配符构成的变量可以替代指定范围内的所有变量,这为取出指定元素带来了便利。
与其他可迭代对象不同的是,字典拆包出来的仅仅是key,如下所示:
第二种方式用*来拆包就比较粗暴了,如下所示:
可以发现,用*给字典拆包,拆出的元素还是key。
其实还有一种拆包,它是鉴于函数来实现的,这种函数也同样实现了装包这个功能。*args和 **kwargs这两个参数相信大家都不陌生,一个是用来接收多余的未命名参数,另一个是用来接收形参中命名参数。args它是一个元组,它把传入的数据放进了args元组中,而kwargs是一个字典,故装包的意义就是把未命名的参数和命名的参数放在元组或字典中。