跳转至

Python 生成器

生成器(generator)是一种返回一个值的迭代器,每次从该迭代器取下一个值。

生成器有两种表示:

生成器表达式
生成器函数

生成器表达式

是用圆括号来创建生成器,其语法与推导式相同,只是将 [] 换成了 () 。 生成器表达式会产生一个新的生成器对象。类似迭代器

1
2
3
4
5
6
7
u = ((X for X in range(20)))
for x in u:
    print(x)


type((i for i in range(5)))
generator

函数

如果包含 yield 指令,该函数调用的返回值是一个生成器对象,此时函数体中的代码并不会执行,只有显示或隐示地调用 next 的时候才会真正执行里面的代码。yield可以暂停一个函数并返回此时的中间结果。该函数将保存执行环境并在下一次恢复。

def fun():
    for i in range(5):
        print("Start...")
        yield i


fun
<function __main__.fun()>

fun()
<generator object fun at 0x04F5D140>

生成器可以通过 send() 接收外部传入的值

1
2
3
4
f = fun()
f.send("hello")

next(f)