collections
collections是Python内建的一个集合模块,提供了许多有用的集合类。
namedtuple
具名元组,tuple的一个子类。能够用来创建类似于tuple的数据类型,除了能够用索引来访问数据,能够迭代,更能够方便的通过属性名来访问数据。类似于tuple,namedtuple的属性也是不可改变的。
1  | from collections import namedtuple  | 
deque
deque是高效实现了插入和删除操作的双向列表,适合用于队列和栈。相较而言list可以按索引快速访问元素,但是插入和删除元素则很慢,因为list是现行存储,数据量大的时候,插入和删除效率很低。
1  | from collections import deque  | 
defaultdict
安全的字典。使用dict时,如果引用的key不存在,则会抛出KeyError,如果希望key不存在时不抛出Error而是返回一个默认值,则可以使用deafultdict
1  | from collections import defaultdict  | 
OrderedDict
在dict中,key是无序的,所以当我们对dict做迭代时顺序是不确定的。当我们需要一个确定的顺序时可以使用OrderedDict。OrderedDict中key的排序是按照插入顺序排序。   
Counter
Counter是一个简单的计数器,并且只存储次数大于一的元素,否则可以访问,但是不存储。
1  | from collections import Counter  | 
特殊方法
通常我们无需直接使用特殊方法,直接调用特殊方法的频率应该远远低于我们去实现他们的次数。通过内置函数(例如
len、iter、str,等等)来使用特殊方法是最好的选择。这些内置函数不仅会调用特殊方法,通常还提供额外的好处,而且对于内置的类来说,他们的速度更快。 ————《Fluent Python》
__getitem__
__getitem__方法的实现使得我们可以像p[key]这样来取值。并且我们通过索引来访问元素时也是使用了__getitem__方法。
__len__
当我们使用len(obj)函数来获取一个对象的长度时,便是调用了__len__方法。
__repr__ or __str__
简单来说这两个方法都是用于显示的,但是__str__是面向用户的,__repr__是面向程序员的。
在使用str()或者是print()时候会首先调用__str__方法,并且这种方法返回的字符串对终端用户更友好。在没有实现__str__方法时,两个函数回去调用__repr__方法。如果两个方法二选一去实现,显而易见后者是我们的选择。
__enter__ and __exit__
用于上下文管理,简单讲解见这里。
附录
- 跟运算符无关的特殊方法
 - 根运算符相关的特殊方法
 
Others
其他的特殊方法还有很多,与以上集中特殊方法各有异同,能力有限,时间有限不做过度描述。