生成器(Generator)是 Python 中的一种特殊类型,它允许你创建一个迭代器,这个迭代器可以一次生成一个值,而不是一次性生成所有值。这对于处理大量数据或者需要按需生成数据的情况非常有用。

生成器函数

要创建一个生成器,你需要定义一个函数,并在函数中使用 yield 语句。每次调用生成器函数时,它不会像普通函数那样执行完毕,而是返回一个生成器对象。这个对象可以用来迭代,每次迭代会执行到下一个 yield 语句。

def generate_numbers(n):
    for i in range(n):
        yield i

# 使用生成器
for number in generate_numbers(5):
    print(number)

生成器表达式

生成器表达式与列表推导式类似,但是它们创建的是生成器对象,而不是列表。

# 列表推导式
numbers_list = [x for x in range(5)]

# 生成器表达式
numbers_gen = (x for x in range(5))

# 使用生成器表达式
for number in numbers_gen:
    print(number)

生成器与列表的区别

  • 内存使用:生成器不会一次性将所有数据加载到内存中,而列表会。
  • 效率:对于大量数据的处理,生成器通常比列表更高效。

图片示例

Python 生成器

扩展阅读

更多关于 Python 生成器的信息,可以参考Python 生成器教程

# Python 生成器进阶教程

在上一部分中,我们学习了 Python 生成器的基础知识。在这一部分,我们将深入探讨生成器的更多高级特性。

## 生成器方法

生成器方法允许你将生成器逻辑封装到类中。这样,你可以创建一个可以重用的生成器类。

```python
class NumberGenerator:
    def __init__(self, n):
        self.n = n

    def __iter__(self):
        for i in range(self.n):
            yield i

# 使用生成器方法
for number in NumberGenerator(5):
    print(number)

生成器协程

Python 3.5 引入了异步编程,其中协程(Coroutine)是一个重要的概念。协程可以与生成器一起使用,以创建异步生成器。

import asyncio

async def async_generator():
    for i in range(5):
        await asyncio.sleep(1)  # 模拟异步操作
        yield i

# 使用异步生成器
async def main():
    async for number in async_generator():
        print(number)

asyncio.run(main())

图片示例

Python 生成器协程

扩展阅读

如果你对 Python 生成器和协程感兴趣,可以阅读Python 异步编程教程