zoukankan      html  css  js  c++  java
  • __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

  • 相关阅读:
    web.xml中/与/*的区别
    restController相关
    mvc:resources
    RequestMethod 相关
    Springside学习
    命名规范的反思
    C++ 构造中调用构造
    C++ 匿名对象的生命周期
    C++ 构造函数的对象初始化列表
    C++ 类的构造函数使用规则
  • 原文地址:https://www.cnblogs.com/Manuel/p/12864345.html
Copyright © 2011-2022 走看看