对于初次接触迭代器这个名字的人来说,确实是比较难理解的事。本篇博客就来简单地说说迭代器。
相信每个用过python的人都用过下面两句中至少其中一个:
for i in range(n):
pass
or
for i in xrange(n):
pass
上面中xrange()就是一个迭代器,range(n)会立即生成一个List(List本身是可迭代的),相当于for i in [0,1,…,n-1],而xrange是在每次循环完成后才产生下一个i值。当n较小的时候,两者没什么区别,当n很大的时候,相比range(),xrange()由于不会提前产生List,可以避免内存的浪费。
接下来我们创建一个迭代器:
class Square:
def __init__(self):
self.value = 0
def __iter__(self):#__iter__方法返回迭代器
return self
def next(self):#迭代器必须有next方法
self.value += 1
return self.value*self.value
square = Square()
for i in square:
print i
if(i>10):
break
运行结果如下:
1
4
9
16
解释:
__iter__返回指向了自己,每次循环的时候调用的是next函数,for i in square循环中
相当于i = square.next()