generator

生成器是一个用于创建迭代器的简单而强大的工具。

返回数据时使用yield语句

生成器会自动创建__iter__()和__next()__方法、自动保存程序状态

列表生成器

列表推导式

应用场景

f = (x ** 2 for x in range(1, 1000))
print(sys.getsizeof(f))  # 相比生成式生成器不占用存储数据的空间
print(f)
for val in f:
    print(val)

yield关键字

将一个普通函数改造成生成器函数

def fib(n):
    a, b = 0, 1
    for _ in range(n):
        a, b = b, a + b
        yield a
 
for val in fib(20):
    print(val)