python之迭代器和生成器

迭代器

根本上说, 迭代器就是有一个 next() 方法的对象

迭代器可用内建的iter方法创建

>>> i = iter(abc)
>>> i.next()
a
>>> i.next()
b
>>> i.next()
c

 

 对类可用__iter__和next()创建迭代器

class Fib(object):
    def __init__(self):
        self.a, self.b = 0, 1 # 初始化两个计数器a,b

    def __iter__(self):
        return self # 实例本身就是迭代对象,故返回自己

    def next(self):
        self.a, self.b = self.b, self.a + self.b # 计算下一个值
        if self.a > 100000: # 退出循环的条件
            raise StopIteration();
        return self.a # 返回下一个值

for n in Fib():
    print n

-------------------------------
1
1
2
3
5
...
46368
75025

 

 

 

生成器

生成器是可以迭代的,但是只可以读取它一次

>>> g = (x*x for x in range(3))
>>> for i in gt :
...    print(i)
0
1
4
>>> for i in g :
...    print(i)

 

yield

#当你调用这个函数的时候,函数内部的代码并不立马执行, 这个函数只是返回一个生成器对象
def createGenerator():
    mylist = range(3)
    for i in mylist:
        yield i*i

>>> for i in mygenerator:
    print i
0
1
4
>>> for i in mygenerator:  #也是只可调用一次
    print i

 

 

 

2015-05-26

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。