Python 中如何创建生成器?

推荐答案

在 Python 中,生成器可以通过两种方式创建:

  1. 使用生成器函数:通过 yield 关键字来定义生成器函数。每次调用生成器函数时,它会返回一个生成器对象,该对象可以用于迭代。

  2. 使用生成器表达式:生成器表达式类似于列表推导式,但使用圆括号而不是方括号。生成器表达式返回一个生成器对象。

本题详细解读

生成器函数

生成器函数是一种特殊的函数,它使用 yield 语句而不是 return 语句来返回值。当生成器函数被调用时,它不会立即执行函数体,而是返回一个生成器对象。生成器对象是一个迭代器,可以通过 next() 函数或 for 循环来逐个获取值。

  • yield 关键字yield 关键字用于暂停函数的执行并返回一个值。当生成器再次被调用时,它会从上次暂停的地方继续执行。

  • 生成器对象:生成器函数返回的生成器对象是一个迭代器,它实现了 __iter__()__next__() 方法。每次调用 next() 函数时,生成器会执行到下一个 yield 语句并返回相应的值。

生成器表达式

生成器表达式是一种简洁的创建生成器的方式,语法类似于列表推导式,但使用圆括号而不是方括号。生成器表达式返回一个生成器对象,而不是一个列表。

  • 语法:生成器表达式的语法为 (expression for item in iterable),其中 expression 是生成器每次迭代时返回的值,item 是迭代变量,iterable 是可迭代对象。

  • 惰性求值:生成器表达式是惰性求值的,这意味着它只在需要时生成值,而不是一次性生成所有值。这使得生成器表达式在处理大数据集时非常高效。

生成器的优势

  • 内存效率:生成器不会一次性生成所有值,而是按需生成,因此在处理大数据集时非常节省内存。
  • 延迟计算:生成器允许延迟计算,只有在需要时才生成值,这在处理无限序列或流式数据时非常有用。

示例代码

-- -------------------- ---- -------
- -------
--- ------------
    -- - - -- -
    ----- -----
        ----- -
        -- - - -- - - -

- -------
------- - -----------
--- - -- ----------
    --------------------

- --------
------- - -- - - --- - -- ----------
--- ------ -- --------
    -------------

通过生成器函数和生成器表达式,Python 提供了一种高效且灵活的方式来处理迭代和生成序列数据。

纠错
反馈