Python 学习之六: yield 与 Iterator

1, iterator 是一个实现了以下方法的对象:

1)next方法:  返回容器的下一个元素(在此方法中需要抛出StopIteration异常以标识遍历结束)
2)__iter__方法:  将迭代器设置为初始状态,返回迭代器自身

当一个对象具备了以上两个方法则此对象可以在 "for x in obj" 语句中遍历

class Iter:  
    def __init__(self):  
        self.max = 3  
        self.value = 0
 
    def __iter__(self):
        print "this method will take the iterator to the initial status"
        self.value = 0
        return self
 
    def next(self):  
        self.value = self.value +1
        if self.value > self.max:
            print "no elm in the iterator"
            raise StopIteration  
        print "next() return %s" % self.value
        return self.value
             
a = Iter()
for i in a:  
    print i
    
for i in a:  
    print i

outpu:

(env) D:\work\>python dec.py
this method will take the iterator to the initial status
next() return 1
1
next() return 2
2
next() return 3
3
no elm in the iterator
this method will take the iterator to the initial status
next() return 1
1
next() return 2
2
next() return 3
3
no elm in the iterator

2, yield 关键字

如果某个函数中使用了yield 关键字, 此函数将被解释器包装成一个迭代器生成器.即调用函数会返回一个迭代器. 

迭代器的next()方法返回函数yield出的值.

在函数中执行到yield语句后, 函数的执行将会停止, 所有的局部变量会得以保存. 当进行下一次迭代时, 函数会从上一次停止处

(上次迭代的yield处)继续执行, 直到函数退出(包括StopIteration异常退出)

def IterGen():
    for i in range(1,4):
        print "i=%s" % i
        yield i

iter = IterGen()
for a in iter:
    print "a=%s" % a


(env) D:\work\>python dec.py
i=1
a=1
i=2
a=2
i=3
a=3

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值