迭代器
是一个对象,能够记住遍历的位置,通过调用 next() 方法获得下一个元素
a = iter([1,2,3,4]) # <listiterator object at 0x7f639087be50>
a.next() # 1
a.next() # 2
实现一个迭代器,需要做:
创建一个可成为迭代器的类
1 实现 __iter__(self): 迭代首先会调用这个方法,获得可迭代对象的引用,一般都是 return self
2 实现 __next__(self): 每次迭代都会调用这个方法,这里返回我们需要的元素
当元素达到终止迭代条件时,raise StopIteration
class MyRange(object):
def __init__(self, start, end, step):
self.start = start
self.end = end
self.step = step
def __iter__(self):
return self
def __next__(self):
if self.start < self.end:
res = self.start
self.start += self.step
return res
else:
raise StopIteration
if __name__ == '__main__':
t = MyRange(1, 12, 2)
print(next(t))
for i in t:
print(i, end=",")
输出
1
3,5,7,9,11,
生成器
使用 yeild 的函数就是一个生成器,生成器只有一个作用: 用于迭代
生成器本质就是一个迭代器
def get_fib(n):
a, b = 0, 1
for i in range(n):
if i <= 1:
yield i
else:
a, b = b, a + b
yield b
i += 1
if __name__ == '__main__':
print("\n斐波那契数列:")
for f in get_fib(10):
print(f, end=",")
输出
斐波那契数列
0,1,1,2,3,5,8,13,21,34,