生成器(Generator)是Python中一个重要的概念。生成器是一个返回迭代器的函数,可以对其进行迭代操作。
生成器的优点是:
- 节省空间。生成器函数不会一次构造所有的元素,而是每个次调用构造一个新的元素。这可以生成无限序列。
- 提供暂停和恢复功能。可以在迭代过程中暂停和恢复生成器函数。
在Python中,生成器可以这样定义和使用:
- 使用
yield
关键字将一个普通函数改造为生成器函数。 - 调用生成器函数时,它不会真正执行,而是返回一个迭代器。
- 使用
next()
函数 / next()方法对迭代器进行迭代,这会导致生成器函数一直执行到下一个yield
关键字。 - 生成器函数在
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()是一个读取文本文件的生成器函数。用于逐行读取文件内容。