Python 高手编程系列二百一十五:超越基础集合类型 — collections 模块

每种数据结构都有其缺点。没有一种集合类型适合解决所有问题,4 种基本类型(元
组、列表、集合和字典)提供的选择也不算多。它们是最基本也是最重要的集合类型,都
有专门的语法。幸运的是,Python 标准库内置的 collections 模块提供了更多的选择。
前面已经提到过其中一种(deque)。下面是这个模块中最重要的集合类型。
• namedtuple():用于创建元组子类的工厂函数(factory function),可以通过属性
名来访问它的元索引。
• deque:双端队列,类似列表,是栈和队列的一般化,可以在两端快速添加或取出
元素。
• ChainMap:类似字典的类,用于创建多个映射的单一视图。
• Counter:字典子类,由于对可哈希对象进行计数。
• OrderedDict:字典子类,可以保存元素的添加顺序。
• defaultdict:字典子类,可以通过调用用户自定义的工厂函数来设置缺失值。
高级语法
在一种语言中,很难客观判断哪些语法元素属于高级语法。对于本章会讲到的高级语
法元素,我们会讲到这样的元素,它们不与任何特定的内置类型直接相关,而且在刚开始
学习时相对难以掌握。对于 Python 中难以理解的特性,其中最常见的是:
• 迭代器(iterator)。
• 生成器(generator)。
• 装饰器(decorator)。
• 上下文管理器(context manager)。
迭代器
迭代器只不过是一个实现了迭代器协议的容器对象。它基于以下两个方法。
next:返回容器的下一个元素。
iter:返回迭代器本身。
迭代器可以利用内置的 iter 函数和一个序列来创建。看下面这个例子:

i = iter(‘abc’)
next(i)
‘a’
next(i)
‘b’
next(i)
‘c’
next(i)
Traceback (most recent call last):
File “”, line 1, in
StopIteration
当遍历完序列时,会引发一个 StopIteration 异常。这样迭代器就可以与循环兼容,
因为可以捕获这个异常并停止循环。要创建自定义的迭代器,可以编写一个具有__next__
方法的类,只要这个类提供返回迭代器实例的__iter__特殊方法:
class CountDown:
def init(self, step):
self.step = step
def next(self):
“”“Return the next element.”“”
if self.step <= 0:
raise StopIteration
self.step -= 1
return self.step
def iter(self):
“”“Return the iterator itself.”“”
return self
下面是这个迭代器的用法示例:
for element in CountDown(4):
… print(element)

3
2
1
0
迭代器本身是一个底层的特性和概念,在程序中可以不用它。但它为生成器这一更有
趣的特性提供了基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值