9.3 collections
地址: http://docs.python.org/library/collections.html
9.3.1 ABC – abstract base classes
collections 模块提供了一些抽象类。可以用来检查某个类或者实例是否支持特定的功能,也可以作为 mixin 类使用。
9.3.2 deque
文档的例子比较详细了。自己敲了一遍:
>>> from collections import deque
>>> d = deque()
>>> d
deque([])
>>> d = deque(1,2,3)
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
d = deque(1,2,3)
TypeError: deque expected at most 1 arguments, got 3
>>> d = deque([1,2,3])
>>> d
deque([1, 2, 3])
>>> d.append(4)
>>> d
deque([1, 2, 3, 4])
>>> d.appendleft(0)
>>> d
deque([0, 1, 2, 3, 4])
>>> d.pop()
4
>>> d
deque([0, 1, 2, 3])
>>> d.popleft()
0
>>> d
deque([1, 2, 3])
>>> d.extend([4,5,6,7])
>>> d
deque([1, 2, 3, 4, 5, 6, 7])
>>> d.rotate(1)
>>> d
deque([7, 1, 2, 3, 4, 5, 6])
>>> d.rotate(-1)
>>> d
deque([1, 2, 3, 4, 5, 6, 7])
>>> d.rotate(5)
>>> d
deque([3, 4, 5, 6, 7, 1, 2])
>>> d.rotate(2)
>>> d
deque([1, 2, 3, 4, 5, 6, 7])
>>>
文档里还有一部分是 deque 的应用实例,例如读取一个文件最后几行的 tail 函数、 moving_average 。
9.3.3 defaultdict
是 dict 的子类。多了一个 __missing__(key) 函数和 default_factory 属性,其实就是提供了一种默认行为。例如:
字典:
>>> d = {}
>>> d['snow']
Traceback (most recent call last):
File "<pyshell#46>", line 1, in <module>
d['snow']
KeyError: 'snow'
默认字典:
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> d['snow']
0
文档里有应用实例,用来计数。用 if 同样可以实现计数,但是性能要差。
9.3.4 namedtuple()
除了支持所有的元组操作之外,可以使用名称而不是位置来访问元素。文档里有一个 Point 的例子。
2009 年 6 月 7 日 15:04:17