但是在开始之前,它很好地解释了如何在Python中实现迭代协议。如果要在容器上提供迭代,请指定__iter__()
提供迭代器类型的类方法。“了解Python的’for’语句”是一篇不错的文章,涵盖了该for-in
语句在Python中的实际工作方式,并提供了有关迭代器类型如何工作的很好概述。
看一下以下内容:
>>> sequence = [1, 2, 3, 4, 5]
>>> iterator = sequence.__iter__()
>>> iterator.next()
1
>>> iterator.next()
2
>>> for number in iterator:
print number
3
4
5
现在回到itertools
。该软件包包含用于各种迭代目的的函数。如果您需要进行特殊测序,那么这是第一个研究的地方。
在底部,您可以找到“食谱”部分,其中包含使用现有itertools作为构建块来创建扩展工具集的食谱 。
def consume(iterator, n):
'''Advance the iterator n-steps ahead. If n is none, consume entirely.'''
collections.deque(itertools.islice(iterator, n), maxlen=0)
这是一个简短易懂的示例,说明其工作方式 (Python 2.5) :
>>> import itertools, collections
>>> def consume(iterator, n):
collections.deque(itertools.islice(iterator, n))
>>> iterator = range(1, 16).__iter__()
>>> for number in iterator:
if (number == 5):
# Disregard 6, 7, 8, 9 (5 doesn't get printed just as well)
consume(iterator, 4)
else:
print number
1
2
3
4
10
11
12
13
14
15