1
Python编程从入门到实践
1.10.6 本章小结
本章小结

要想准确、高效地写出Python代码,对标准库里的序列类型的掌握是不可或缺的。Python序列类型最常见的分类就是可变和不可变序列。但另外一种分类方式也很有用,就是把它们分为扁平序列和容器序列。前者的体积更小、速度更快,并且用起来更简单,但是它只能保存一些原子性的数据,比如数字、字符和字节。容器序列则比较灵活,但是当容器序列遇到可变对象时,用户就需要格外小心了,因为这种组合时常会出现一些“意外”,特别是带嵌套的数据结构出现时,用户要多费一些心思来保证代码正确。

列表推导和生成器表达式则提供了灵活构建和初始化序列的方式,这两个工具都异常强大。

元组在Python里扮演了两个角色,它既可以用作无名称的字段的记录,又可以看作不可变的列表。当元组被当作记录来用时,拆包是最安全、可靠的从元组里提取不同字段信息的方式。新引入的*句法让元组拆包的便利性更上一层楼,让用户可以选择性地忽略不需要的字段。具名元组也已经不是一个新概念了,但它似乎没有受到应有的重视。就像普通元组一样,具名元组的实例也很节省空间,但它同时提供了方便地通过名字来获取元组各个字段信息的方式。

Python里最受欢迎的一个语言特性就是序列切片,并且很多人其实还没完全了解它的强大之处。重复拼接seq*n在正确使用的前提下,能让人们方便地初始化含有不可变元素的多维列表。增量赋值+=和*=会区别对待可变和不可变序列。在遇到不可变序列时,这两个操作会在背后生成新的序列。但如果被赋值的对象是可变的,那么这个序列会就地修改,然而这也取决于序列本身对特殊方法的实现。

序列的sort方法和内置的sorted函数虽然很灵活,但是用起来都不难。这两个方法都比较灵活,是因为它们都接受一个函数作为可选参数来指定排序算法如何比较大小,这个参数就是key参数。key还可以被用在min和max函数里。