Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。或者这样说可能更容易理解:Iterator模式是运用于聚合对象的一种模式,通过运用该模式,使得我们可以在不知道对象内部表示的情况下,按照一定顺序(由iterator提供的方法)访问聚合对象中的各个元素。
A. 一个类里面,如果实现了 __iter__ 这个函数, 那这个类就是 “可迭代的”
B. 如果它还实现了 next ( self ) ,那它就称为 迭代器
举一个简单的例子:
先上代码:
[python] view plaincopyprint?
- __metaclass__ = type
- class Fibs() :
- def __init__ ( self ) :
- self.a = 0
- self.b = 1
- def next ( self ) :
- self.a , self.b = self.b , self.a+self.b
- return self
- def __iter__ ( self ) :
- return self
注意 next 函数 定义了 递进 的规则 ,并返回 self ( !!! )。
而 __iter__ 则直接返回 self , 源码里对于这个是怎么解释, 好想知道,求解。 或许哪天得找源码来看看。
这就定义了一个 迭代器。
然后可以看看它的元素。
[python] view plaincopyprint?
- fibs = Fibs()
- for f in fibs :
- print f.a ,
- if f.a > 30 :
- break
结果是:
[python] view plaincopyprint?
- lam ~/pycode $ python2 iter.py
- 1 1 2 3 5 8 13 21 34
有木有注意到。 第0个元素( init 的 那个 ) 不见了。
所以迭代器不能拿到第0个(初始)的元素,是吧。
不明觉厉,感觉应该是迭代器本身就是通过 next 来拿到元素, 初始元素当然拿不到。
python——iterator迭代器
时间: 2024-10-13 17:07:05