python中的生成器和迭代器

一、迭代器
可以用于for语句进行循环的对象就是可迭代对象,例如内置数据类型list、dict、tuple、str等。
我们也可以构建自己的迭代器,包含一系列元素,也可以通过for循环取出元素,也可以使用next()方法。使用迭代器的好处是:当数列长度过大时,可以减少内存消耗,因为每次只返回一个值。
二、产生迭代器的三种方法
1. iter()和next()方法
迭代器例子:

class Container(object):
    def __init__(self, start_num=0, end_num=0):
        '''
        Constructor
        '''
        self.start = start_num
        self.end = end_num

    def __iter__(self):
        print "create an iterator"
        return self
    # python2.x用next(),python3.x用__next__()
    def next(self):
        print "calling next method"
        if self.start < self.end:
            i = self.start
            self.start += 1
            return i
        else:
            raise StopIteration()
if __name__ == "__main__":
    c = Container(0, 3)
    for x in c:
        print x

输出结果:
create an iterator
calling next method
0
calling next method
1
calling next method
2
calling next method
  1. 生成器
    可以通过三种方式得到生成器,一种是yield方法。程序执行到yield后返回值,并暂停,直到下次被访问,从上次暂停的位置开始继续执行。
def generator(start, end):
    while start < end:
        yield start
        start += 1
g = generator(0, 5)
print g
print next(g)
next(g)
for x in g:
    print x
输出结果:
<generator object generator at 0x0000000002847A68>
0
2
3
4

3.使用内置函数 iter()
利用iter()方法将迭代对象转化为迭代器

iters = iter([1,2,3])
print iters
print next(iters)
print next(iters)
print next(iters)

输出结果:
<listiterator object at 0x00000000027FB4A8>
1
2
3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值