这里介绍Python中的Packing封包、Unpacking解包
Packing封包
所谓封包指的是,将多个值赋值给一个变量时,Python会自动将这些值封包为一个元组
1 | title = "Packing 封包" |
Unpacking解包
序列/可迭代对象 解包
所谓 序列解包 (或可迭代对象解包)指的是:对一个序列(或可迭代对象)解包,并将得到的值存储到一系列变量中
1 | title = "解包" |
解包的序列(或可迭代对象)包含的元素个数 必须与 等号左侧的变量数相同,否则会抛异常
1 | students = {"Bob", "Aaron", "tony"} |
如果解包的序列(或可迭代对象)包含的元素个数 与 等号左侧的变量数 不同时,可在变量名前添加*星号,其会将多余的值以列表的形式赋值给该变量。显然存在多个*星号变量会报错
1 | a, *b, c = (11,22,33,44,55,66) |
解包时如果不关心该位置的值, 可以使用占位符_下划线
1 | f, _, g, _ =(11,22,33,44) |
需注意注意的是,进行解包时,左侧不能只有一个变量名
1 | x = (11,22,33) |
解包传参
- 对于 序列对象,在实参添加 * 前缀,其会将序列对象解包为若干个元素,作为函数调用的位置实参
- 对于 字典对象,在实参添加 ** 前缀, 其会将字典解包为若干个键值对,作为函数调用的关键字实参
1 |
|
交换变量
在其他语言中交换变量值,通常需要依赖中间变量来实现。但在Python中却可以直接交换。其中对于多变量交换时,其底层实现原理即是通过序列解包实现的
1 | x,y = 100, -69 |
zip函数
zip函数将可迭代对象作为参数,其会把各可迭代对象中对应位置的元素打包为一个元组。可将zip结果对象转换为list来查看、遍历。需要注意的是,当各可迭代对象的长度不同时,zip函数将在长度最短的可迭代对象用完时,停止打包
1 | names = ["Aaron", "Tom", "Bob", "Tony"] |
对zip对象解包时,可在传递实参zip结果对象的前添加 * 前缀
1 | names = ["Aaron", "Tom", "Bob", "Tony"] |
参考文献
- Python编程·第3版:从入门到实践 Eric Matthes著
- Python基础教程·第3版 Magnus Lie Hetland著
- 流畅的Python·第1版 Luciano Ramalho著