Learning Python : 3. iterator 迭代器

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

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


举一个简单的例子:

先上代码:

__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 , 源码里对于这个是怎么解释, 好想知道,求解。 或许哪天得找源码来看看。


这就定义了一个 迭代器。

然后可以看看它的元素。

fibs = Fibs()
for f in fibs :
    print f.a , 
    if f.a > 30 :
        break

结果是:

lam ~/pycode $ python2 iter.py 
1 1 2 3 5 8 13 21 34

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

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值