__next__和__iter__实现迭代器协议

# __next__和__iter__实现迭代器协议
class Foo:
    def __init__(self, n):  # 初始化
        self.n = n

    def __iter__(self): # 定义类的__iter__方法,实例化时就为一个可迭代对象
        return self

    def __next__(self): # 定义类的__next__方法,并在其中设置抛出StopIteration的条件
        self.n += 1
        if self.n > 100:
            raise StopIteration
        return self.n

f1 = Foo(10)

for i in f1:    # 本质上就是iter(f1)==f1.__iter__()
    print(i)


# 迭代器协议实现斐波那契数列

class Fib:
    def __init__(self):  # 初始化

        self.a = 0
        self.b = 1

    def __iter__(self):  # 定义类的__iter__方法,实例化时就为一个可迭代对象
        return self

    def __next__(self):  # 定义类的__next__方法,并在其中设置抛出StopIteration的条件
        self.a, self.b = self.b, self.a + self.b

        if self.a > 10000:
            raise StopIteration
        return self.a


fib = Fib()
print(next(fib))
print(next(fib))
print(next(fib))
print(next(fib))
print(next(fib))
print('----------------------')
for i in fib:
    print(i)

 

posted @ 2018-08-13 21:17  四十不惑的编程之路  阅读(491)  评论(0编辑  收藏  举报