首页 > 其他 > 详细

如何让类也变成可以迭代的对象

时间:2020-06-14 10:10:50      阅读:68      评论:0      收藏:0      [点我收藏+]
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

 

如何让类也变成可以迭代的对象

原文:https://www.cnblogs.com/vincent-sh/p/13123642.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!