迭代器就是重复地做一些事情,可以简单的理解为循环,在python中实现了__iter__方法的对象是可迭代的,实现了next()方法的对象 是迭代器,这样说起来有点拗口,实际上要想让一个迭代器工作,至少要实现__iter__方法和next方法。很多时候使用迭代器完成的工作使用列表也可 以完成,但是如果有很多值列表就会占用太多的内存,而且使用迭代器也让我们的程序更加通用、优雅、pythonic。下边是一个例子,从里边你会感受到不 用列表而用迭代器的原因。

  1. #!/usr/bin/env python  
  2. #coding=utf-8  
  3. class Fib:  
  4.     def __init__(self):  
  5.         self.a,self.b = 0,1  
  6.     def next(self):  
  7.         self.a,self.b = self.b,self.a+self.b  
  8.         return self.a  
  9.     def __iter__(self):  
  10.         return self  
  11. fibs = Fib()  
  12. for f in fibs:  
  13.     if f < 10000:  
  14.         print f  
  15.     else:  
  16.         break  

 

迭代器是一个对象,而生成器是一个函数,迭代器和生成器是python中两个非常强大的特性,编写程序时你可以不使用生成器达到同样的效果,但是生 成器让你的程序更加pythonic。创建生成器非常简单,只要在函数中加入yield语句即可。函数中每次使用yield产生一个值,函数就返回该值, 然后停止执行,等待被激活,被激活后继续在原来的位置执行。下边的例子实现了同样的功能:

  1. #!/usr/bin/env python  
  2. #coding=utf-8  
  3. def fib():  
  4.     a,b = 0,1  
  5.     while 1:  
  6.         a,b = b,a+b  
  7.         yield a  
  8. for f in fib():  
  9.     if f < 10000:  
  10.         print f  
  11.     else:  
  12.         break

python中的迭代器与生成器 – AncerHaides的专栏 – 博客频道 – CSDN.NET.

- EOF -