python迭代器

可迭代对象(Iterable):

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




  1. 内置函数iter()仅仅是调用了对象的__iter__()方法,所以iterable对象内部一定存在方法__iter__()
  2. 内置函数next()仅仅是调用了对象的next()方法,Iterator中一定存在这个方法。

for iin MyIterator(3):

print i

运行结果:

0

1

2

在你使用for 和 in 语句时,程序就会自动调用即将被处理的对象的迭代器对象,然后使用它的next__()方法,直到监测到一个StopIteration异常


你可能感兴趣的:(Python)