📜  Python生成器(1)

📅  最后修改于: 2023-12-03 14:46:45.474000             🧑  作者: Mango

Python生成器

在 Python 中,生成器是一种特殊的函数,它不是一次性产生所有结果,而是通过 yield 关键字逐个返回结果,这样可以节省大量内存空间。

创建生成器

生成器有两种创建方法:使用函数和生成器表达式。

通过函数创建生成器

使用函数创建生成器时,需要在函数内部使用关键字 yield 来每次返回一个结果。当函数被调用时,它会返回一个生成器对象。下面是一个简单的例子:

def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()
print(next(gen))    # 1
print(next(gen))    # 2
print(next(gen))    # 3
通过生成器表达式创建生成器

生成器表达式是一种快速创建生成器的方法。它的语法和列表推导式类似,只需将列表推导式中的方括号改为圆括号,即可得到一个生成器表达式。

gen = (x**2 for x in range(5))
print(next(gen))    # 0
print(next(gen))    # 1
print(next(gen))    # 4
生成器与迭代器

生成器是一种迭代器,因此可以使用 for...in 循环来迭代遍历生成器中的所有值。

gen = (x**2 for x in range(5))
for x in gen:
    print(x)
生成器与协程

生成器可以作为一种协程来使用。协程是一种轻量级的线程,不需要操作系统切换上下文,因此非常高效。

def my_coroutine():
    while True:
        received = yield
        print('Received:', received)

coro = my_coroutine()
next(coro)
coro.send('Hello, world!')    # Received: Hello, world!
总结

生成器是一种高效的逐个输出结果的方法,可以节省大量内存空间。在 Python 中,生成器是一种特殊的函数,可以通过函数或生成器表达式创建。生成器是一种迭代器,可以使用 for 循环来遍历所有结果。生成器也可以作为协程来使用,提高程序的效率。