44. 什么是生成器(generator)

生成器是一个函数,允许你返回一个值, 然后”暂停”函数代码的执行,

生成器返回生成器迭代器的函数。它看起来像一个正常的函数,除了它包含了生成一系列 可用于for循环的值的yield表达式,或者可以一次使用next()函数检索一个值。

生成器是一个带yield 语句的函数。通常一个函数只返回一次,但一个生成器函数 能暂停执行并返回一个中间的结果—-那就是yield 语句的功能, 返回一个值给 调用者并暂停执行。当对生成器调用next()函数的时候,它会准确地从离开地方继续执行。

例如一个简单的生成器函数:

def gen():  # defines a generator function
    yield 1
    yield 3
    yield 5
    yield 7

g = gen()
print(type(g))  #生成器对象
print(next(g), next(g), next(g), next(g))  #依次是1, 3, 5, 7

for i in gen():
    print(i)
#输出四行数据,依次是1,3,5,7

gen函数返回一个生成器对象,通常用于for in迭代使用,它可以迭代调用next()函数。

yield语句

yield语句仅用于定义一个生成器(generator)函数。 在函数定义中 使用yield就使该定义创建一个生成器函数,而不是一个正常的函数。

进一步阅读请参考 https://docs.python.org/3/reference/expressions.html#yield-expressions