Python 迭代器和生成器

迭代器

        是一个对象,能够记住遍历的位置,通过调用  next()  方法获得下一个元素

a = iter([1,2,3,4]) # <listiterator object at 0x7f639087be50>
a.next() # 1
a.next() # 2

        实现一个迭代器,需要做:
                创建一个可成为迭代器的类
                1  实现  __iter__(self):  迭代首先会调用这个方法,获得可迭代对象的引用,一般都是  return  self
                2  实现  __next__(self):  每次迭代都会调用这个方法,这里返回我们需要的元素
                                                                当元素达到终止迭代条件时,raise  StopIteration

class MyRange(object):

    def __init__(self, start, end, step):
        self.start = start
        self.end = end
        self.step = step

    def __iter__(self):
        return self

    def __next__(self):
        if self.start < self.end:
            res = self.start
            self.start += self.step
            return res
        else:
            raise StopIteration


if __name__ == '__main__':
    t = MyRange(1, 12, 2)
    print(next(t))
    for i in t:
        print(i, end=",")

        输出

1
3,5,7,9,11,
生成器

        使用  yeild  的函数就是一个生成器,生成器只有一个作用:  用于迭代
        生成器本质就是一个迭代器

def get_fib(n):
    a, b = 0, 1
    for i in range(n):
        if i <= 1:
            yield i
        else:
            a, b = b, a + b
            yield b
        i += 1


if __name__ == '__main__':
    print("\n斐波那契数列:")
    for f in get_fib(10):
        print(f, end=",")

        输出

斐波那契数列
0,1,1,2,3,5,8,13,21,34,