迭代器 iterator,给可迭代对象增加了next方法,依次索引对象
a = [1, 2, 3] # iterable
a = iter(a) # iterator
print(next(a)) # 1
print(next(a)) # 2
print(next(a)) # 3
生成器,generator 特殊的迭代器
用多少生成多少,并不是一次生成所有元素而浪费内存
方法一,用列表生成式时,把方括号改为圆括号
(i for i in range(1,4))
方法二,函数使用yield 返回值
def gene(n):
for i in range(n):
yield i
a = gene(6) # a generator
next(a)
# 通过类建立生成器
class Gene:
def gene(self,n):
for i in range(n):
yield i
A = Gene()
a = A.gene(6)
next(a)
进阶: 纯手动实现迭代器
class Gene:
def __init__(self,n):
self.n = n
self.count = 0
def __iter__(self):
return self
def __next__(self):
m = self.count
self.count += 1
if self.count > self.n:
raise StopIteration
return m
a = Gene(6)
next(a) # 调用__next__方法
for i in a: # 先调用__iter__方法,再重复执行next(a),直到遇到StopIteration
print(i)
留言