立即登录

注册账号

联系我们

2021年12月22日 19:13

15. 迭代器与生成器

迭代器 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)

 

留言

给我留言