迭代器是一个带状态的对象,他能在你调用next()方法的时候返回下一个值,任何实现了__iter__和__next__()方法的对象都是迭代器
• __iter__返回迭代器自身,
• __next__返回下一个值,如果没有更多元素了,则抛出StopIteration异常。
根据定义,可以写一个迭代器,并通过next()方法来调用:
class Fib:
def __init__(self,max):
self.count = 0
self.max = max
self.a = 0
self.b = 1
def __iter__(self):
return self
def __next__(self):
if self.count < self.max:
c = self.a + self.b
self.a = self.b
self.b = c
self.count += 1
return self.a
else:
raise StopIteration
# 调用
f = Fib(6)
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
#print(next(f)) 此时会报错
迭代器就像一个懒加载的工厂,等到有人需要的时候才给它生成值返回,没调用的时候就处于休眠状态等待下一次调用。直到无元素可调用,返回StopIteration异常。