Python中任意的对象,只要它定义了可以返回一个迭代器的__iter__
方法,那么它就是一个可迭代对象,可以直接作用于for循环,可迭代对象就是能提供迭代器的任意对象
迭代器(Iterator):
任意对象,只要定义了next
(Python2) 或者__next__
方法,它就是一个迭代器。
所有的Iterable均可以通过内置函数iter()来转变为Iterator。
在你使用for 和 in 语句时,程序就会自动调用即将被处理的对象的迭代器对象,然后使用它的next()方法,直到监测到一个StopIteration异常。
classMyIterator:
def__init__(self,n):
self.n = n
self.index = -1
def__iter__(self):
returnself
defnext(self):
self.index = self.index +1
ifself.index >= self.n:
raise StopIteration()
else:
returnself.index
MyIterator类实现了next方法,所以它是迭代器,同时重写了__iter__方法返回自身,所以是可迭代对象。
iteratorObj = MyIterator(3)
i = iter(iteratorObj)
print next(i)
print next(i)
print next(i)
print next(i)
运行结果:
0
1
2
Traceback (most recent call last):
File "C:\Users\workspace\python\src\iterator.py", line 22, in
print next(i)
StopIteration
for iin MyIterator(3):
print i
运行结果:
0
1
2
在你使用for 和 in 语句时,程序就会自动调用即将被处理的对象的迭代器对象,然后使用它的next__()方法,直到监测到一个StopIteration异常