概述:
迭代器是访问集合内元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束。迭代器不能回退,智能往前迭代。这并不是什么很大的缺点,因为人们几乎不需要在迭代途中进行回退操作。迭代器也不是线程安全的,在多线程环境中对可变集合使用迭代器是一种危险的操作。迭代器不要求事先准备好整个迭代过程中的所有元素。仅仅在迭代至某个元素才计算该元素。在这之前或之后,元素可以不存在或被销毁。这个特点使得它特别适合用于遍历一些巨大的或无线的集合,如几个G的文件,或斐波那契数列。
使用迭代器:
使用内建的工厂函数iter(iterable)可以获取迭代器对象:
>>>lst=range(5)
>>>it=iter(lst)
使用next()方法访问迭代器的下一个元素:
>>>it.next() 或 >>>next(it)
在for循环中,python将自动调用工厂函数iter()获得迭代器。自动调用next()获得元素,还完成了检查StopIteration异常的工作:
>>>for i in it:
print i
自己编写迭代器:
首先,迭代器要有next()方法用于返回值,并且在一定条件下要抛出异常(StopIteration),其次重写__iter__()方法,返回自身对象:
class Myclass(): def __init__(self,lst): self.leng=len(l) self.lst=lst self.value=-1 def __iter__(self): return self def next(self): self.value+=1 if self.value<self.leng: return self.lst[self.value] else: raise StopIteration if __name__==‘__main__‘: a=Myclass([1,2,3,4]) for i in a: print i
输出结果为:1,2,3,4
当需要使用索引时,enumerate()派上用场:
for i,j in enumerate(a): print i,j #i为索引,j为值
原文:http://my.oschina.net/935572630/blog/390982