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

原文地址:https://www.cnblogs.com/whuyt/p/4530087.html