码迷,mamicode.com
首页 > 编程语言 > 详细

python——iterator迭代器

时间:2014-08-08 12:16:05      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:blog   http   strong   for   art   ar   div   代码   

Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。或者这样说可能更容易理解:Iterator模式是运用于聚合对象的一种模式,通过运用该模式,使得我们可以在不知道对象内部表示的情况下,按照一定顺序(由iterator提供的方法)访问聚合对象中的各个元素。

A. 一个类里面,如果实现了  __iter__ 这个函数, 那这个类就是 “可迭代的”

B. 如果它还实现了 next ( self ) ,那它就称为  迭代器

 

举一个简单的例子:

先上代码:

 

 

[python] view plaincopyprint?
 
  1. __metaclass__ = type   
  2. class Fibs() :  
  3.     def __init__ ( self ) :  
  4.         self.a = 0  
  5.         self.b = 1  
  6.     def next ( self ) :  
  7.         self.a , self.b = self.b , self.a+self.b  
  8.         return self  
  9.     def __iter__ ( self ) :  
  10.         return self   



 

注意 next 函数 定义了 递进 的规则 ,并返回 self ( !!! )。

而 __iter__ 则直接返回 self , 源码里对于这个是怎么解释, 好想知道,求解。 或许哪天得找源码来看看。

 

这就定义了一个 迭代器。

然后可以看看它的元素。

 

[python] view plaincopyprint?
 
  1. fibs = Fibs()  
  2. for f in fibs :  
  3.     print f.a ,   
  4.     if f.a > 30 :  
  5.         break  


结果是:

 

 

[python] view plaincopyprint?
 
  1. lam ~/pycode $ python2 iter.py   
  2. 13 21 34  


有木有注意到。 第0个元素( init 的 那个 ) 不见了。

 

所以迭代器不能拿到第0个(初始)的元素,是吧。

不明觉厉,感觉应该是迭代器本身就是通过 next 来拿到元素, 初始元素当然拿不到。

python——iterator迭代器,布布扣,bubuko.com

python——iterator迭代器

标签:blog   http   strong   for   art   ar   div   代码   

原文地址:http://www.cnblogs.com/Simon-xm/p/3898755.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!