生成器+迭代器
20200309
- 生成器
def fib(num):
"""生成器"""
a, b = 0, 1
for _ in range(num):
a, b = b, a + b
yield a
s = fib(5)
for i in s:
print(i, end='\t')
#输出
1 1 2 3 5
- 迭代器
把一个类作为一个迭代器使用需要在类中实现两个方法 iter() 与 next()
StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 next() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代
class Fib(object):
"""迭代器"""
def __init__(self, num):
self.num = num
self.a, self.b = 0, 1
self.idx = 0
def __iter__(self):
return self
def __next__(self):
if self.idx < self.num:
self.a, self.b = self.b, self.a + self.b
self.idx += 1
return self.a
raise StopIteration()
s = Fib(5)
for i in s:
print(i, end='\t')
#输出
1 1 2 3 5