序列解包在 Python 中非常重要并且常用,以简短又可读的代码完成复杂的功能。
最近在看《Python 3 学习笔记》上卷,有非常多的收获,感谢作者完成了这么优秀的作品。里面就有关于序列解包的解读,获益良多,记录下来。
简单操作
序列解包展开所有的元素,继而分别与多个名字关联。
|
|
解包操作还可以用来交换表变量,无须借助第三方,这也是 Python 的一个语法糖。
|
|
对三个以内的变量交换,编译器优化成ROT
指令,直接交换栈帧数据,而不是构建元组。栈帧指的是编译器用来实现过程/函数调用的一种数据结构。
|
|
支持深度嵌套展开。
|
|
星号收集
当序列元素与名字数量不等时,解包出错。为此,Python 3 专门对其进行了扩展。在名字前面添加星号,表示收纳所有的剩余元素。
|
|
解包操作优先保障对非收集名字(也就是不带星号的名字)的赋值,所以元素不能少于非收集名字的数目。
另外需注意的是,星号只能有一个,否则无法界定收集边界。
|
|
星号收集不能单独出现:要么与其他名字一起,要么放入列表或元组内。
|
|
星号展开
星号可以用来展开可迭代对象。
|
|
对于字典,单星号展开主键,双星号展开键值。
|
|
还可以用于函数调用,将单个对象分解成多个实参。
|
|