zoukankan      html  css  js  c++  java
  • 如何让类也变成可以迭代的对象

    class Fib(object):
        def __init__(self):
            self.a, self.b = 0, 1 # 初始化两个计数器a,b
    
        def __iter__(self):
            return self # 实例本身就是迭代对象,故返回自己
    
        def __next__(self):
            self.a, self.b = self.b, self.a + self.b # 计算下一个值
            if self.a > 100000: # 退出循环的条件
                raise StopIteration()
            return self.a # 返回下一个值

    这样Fib就是一个可迭代的对象 , 由于是对象需要对于 类 Fib先实例化

    #for 循环本质
    # l=Fib()
    # iter_l=l.__iter__()
    # while True:
    # try:
    # print(iter_l.__next__())
    # except StopIteration:
    # print('迭代完毕')
    # break

    总结: 

    在类定义中如果有__iter__(),那么就是可迭代对象,如果有了__next__()就是迭代器 

    for 循环的本质需要你既有__iter__(),也 需要你有__next__()

    所以如果 没有__Iter__(),报错!

    我这里变一下 

    class Fib(object):
        def __init__(self):
            self.a, self.b = 0, 1 # 初始化两个计数器a,b
    
        # def __iter__(self):
        #    return self # 实例本身就是迭代对象,故返回自己
    
        def __next__(self):
            self.a, self.b = self.b, self.a + self.b # 计算下一个值
            if self.a > 100000: # 退出循环的条件
                raise StopIteration()
            return self.a # 返回下一个值

    运行

    s= Fib() # 实例本身就是可迭代器
    print(s.__next__())
    print(s.__next__())
    print(s.__next__())
    print(s.__next__())
    print(s.__next__())
    print(s.__next__())
    print(s.__next__())

    结果

    1
    1
    2
    3
    5
    8
    13
  • 相关阅读:
    POJ1006(中国剩余定理)
    Ubuntu16.04安装jupiter
    OpenGL.tutorial06键盘和鼠标
    OpenGL.教程
    OpenGL.Qt532.cube
    Qt551.主窗体Margin
    Qt551.窗口滚动条
    Qt551.OpenGL.ZC简单例子
    Qt5OpenGL.顶点像素大小设置
    OpenGL.Tutorial03_Matrices_测试
  • 原文地址:https://www.cnblogs.com/vincent-sh/p/13123642.html
Copyright © 2011-2022 走看看