生成器+迭代器

20200309


  • 生成器
def fib(num):
    """生成器"""
    a, b = 0, 1
    for _ in range(num):
        a, b = b, a + b
        yield a


s = fib(5)
for i in s:
    print(i, end='\t')

#输出
1	1	2	3	5	
  • 迭代器
    把一个类作为一个迭代器使用需要在类中实现两个方法 iter() 与 next()
    StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 next() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代
class Fib(object):
    """迭代器"""

    def __init__(self, num):
        self.num = num
        self.a, self.b = 0, 1
        self.idx = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.idx < self.num:
            self.a, self.b = self.b, self.a + self.b
            self.idx += 1
            return self.a
        raise StopIteration()


s = Fib(5)
for i in s:
    print(i, end='\t')

#输出
1	1	2	3	5
posted on 2020-03-09 16:22  呼呼小睡  阅读(120)  评论(0编辑  收藏  举报