__iter__和__next__实现迭代器协议

__iter__()将对象转换为可迭代对象,__next__()返回实现迭代

#_*_coding:utf-8_*_
__author__ = 'Linhaifeng'
class Foo:
    def __init__(self,x):
        self.x=x

    def __iter__(self):
        return self

    def __next__(self):
        n=self.x
        self.x+=1
        return self.x

f=Foo(3)
for i in f:
    print(i)
class Foo:
    def __init__(self,start,stop):
        self.num=start
        self.stop=stop
    def __iter__(self):
        return self
    def __next__(self):
        if self.num >= self.stop:
            raise StopIteration
        n=self.num
        self.num+=1
        return n

f=Foo(1,5)
from collections import Iterable,Iterator
print(isinstance(f,Iterator))

for i in Foo(1,5):
    print(i) 

斐波那契数列:

#1,1,2,3,5,8,13,21...
class Foo:
    def __init__(self,star,end):
        self.mid = 0
        self.star = star
        self.end = end
    def __iter__(self):
        return self
    def __next__(self):
        self.mid,self.star = self.star,self.mid+self.star
        if self.star >= self.end:
            raise  StopIteration
        return self.star

f1=Foo(1,1000)
for i in f1:
    print(i)

1

原文地址:https://www.cnblogs.com/Manuel/p/12864345.html