Python中的生成器是什么?如何使用生成器?代码举例讲解

生成器(Generator)是Python中一个重要的概念。生成器是一个返回迭代器的函数,可以对其进行迭代操作。

生成器的优点是:

  1. 节省空间。生成器函数不会一次构造所有的元素,而是每个次调用构造一个新的元素。这可以生成无限序列。
  2. 提供暂停和恢复功能。可以在迭代过程中暂停和恢复生成器函数。

在Python中,生成器可以这样定义和使用:

  1. 使用yield关键字将一个普通函数改造为生成器函数。
  2. 调用生成器函数时,它不会真正执行,而是返回一个迭代器。
  3. 使用next()函数 / next()方法对迭代器进行迭代,这会导致生成器函数一直执行到下一个yield关键字。
  4. 生成器函数在yield处暂停,并返回一个值。下次迭代时从此处恢复。
python
# 例1:斐波那契数列

def fib(n):
    a, b = 0, 1
    for i in range(n):
        yield a
        a, b = b, a + b

f = fib(5)
next(f)   # 0
next(f)   # 1
next(f)   # 1
next(f)   # 2 
next(f)   # 3

# 例2:读取文件内容

def reader(f):
    for line in f:
        yield line

f = open('file.txt')
for line in reader(f):
    print(line)

在上例中:

  • fib()是一个生成器函数,使用yield定义。调用时返回一个迭代器。
  • 使用next()对迭代器迭代,导致fib()函数执行到yield处暂停,并返回值。
  • reader()是一个读取文本文件的生成器函数。用于逐行读取文件内容。