WEB开发网
开发学院软件开发Python 使用 itertools 模块中的组合函数 阅读

使用 itertools 模块中的组合函数

 2007-03-29 12:37:13 来源:WEB开发网   
核心提示:Python 2.2 对 Python 语言引入了简单的生成器,并根据底层迭代器重新构思了标准循环,使用 itertools 模块中的组合函数,在 Python 2.3 中,生成器成了标准(不需要 _future_),通过调用 iter(seq) ,实际序列可以被转换成迭代器 - 这不会节省任何内存,而且引入了新模块

Python 2.2 对 Python 语言引入了简单的生成器,并根据底层迭代器重新构思了标准循环。在 Python 2.3 中,生成器成了标准(不需要 _future_),而且引入了新模块 itertools 以与迭代器一起灵活地工作。itertools 模块本质上是一组组合高阶函数,只不过这些函数与惰性迭代器一起工作,而不是与有限列表一起工作。在这篇专栏文章中,David 研究了该新模块,并使您感受一下组合迭代器所具有的富有表现力的强大新功能。

理解新概念

Python V2.2 中引入了迭代器的思想。唔,这并不十分正确;这种思想的“苗头”早已出现在较老的函数 xrange() 以及文件方法 .xreadlines() 中了。通过引入 yield 关键字,Python 2.2 在内部实现的许多方面推广了这一概念,并使编程定制迭代器变得更为简单( yield 的出现使函数转换成生成器,而生成器反过来又返回迭代器)。

迭代器背后的动机有两方面。将数据作为序列处理通常是最简单的方法,而以线性顺序处理的序列通常并不需要都同时实际 存在。

x*() 前兆提供了这些原理的清晰示例。如果您想对某操作执行成千上万次,那么执行您的程序可能要花些时间,但该程序一般不需要占用大量内存。同样,对于许多类型的文件,可以一行一行地处理,且不需要将整个文件存储在内存中。最好对其它所有种类的序列也进行惰性处理;它们可能依赖于通过通道逐步到达的数据,或者依赖于一步一步执行的计算。

大多数时候,迭代器用在 for 循环内,就象真正的序列那样。迭代器提供了 .next() 方法,它可以被显式调用,但有百分之九十九的可能,您所看到的是以下行:

for x in iterator:
  do_something_with(x)

在对 iterator.next() 进行幕后调用而产生 StopIteration 异常时,该循环就被终止。顺便说一下,通过调用 iter(seq) ,实际序列可以被转换成迭代器 - 这不会节省任何内存,但是在下面讨论的函数中它会很有用。

1 2 3 4 5 6  下一页

Tags:使用 itertools 模块

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接