如何让类也变成可以迭代的对象
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