生成器(Generators
)和 生成器表达式(Generator Expressions
)是 Python 中用于处理迭代器和序列数据的强大工具。它们允许你按需生成值,而不是一次性生成所有值,从而节省内存和提高性能。
1. 生成器(Generators
)
生成器 是一个用于创建迭代器的简单而强大的工具。 它们的写法类似于标准的函数,但当它们要返回数据时(返回一个generator iterator
的函数)会使用 yield
语句。 每次在生成器上调用 next()
时,它会从上次离开的位置恢复执行(它会记住上次执行语句时的所有数据值)。
1.1 语法
def my_generator():
yield 1
yield 2
yield 3
生成器使用函数中的yield
语句来生成值,每次调用生成器的__next__()
方法时,函数会执行到 yield
,返回值并暂停,下一次调用会从上次暂停的地方继续执行。
1. yield
: 返回一个值,并暂停生成器的执行。
2. __next__()
: 获取生成器的下一个值。
3. 生成器可以使用for
循环来遍历。
1.2 应用场景
1. 处理大数据集: 生成器适合处理大量数据,因为它们一次只生成一个值,而不是一次性生成所有值。
2. 无限序列: 适用于表示无限序列,例如斐波那契数列。
3. 懒加载: 用于按需加载大文件中的数据。
4. 状态机: 生成器可以用于实现状态机,处理一系列有序事件。
5. 异步编程: 在异步编程中,生成器可以用于实现协程。
1.3 简单示例
按照指定的模式生成一系列字符串
def pattern_generator(n):
for i in range(1,n+1):
yield ' A ' * i
# 使用生成器生成一系列字符串
pattern_gen = pattern_generator(5)
for pattern in pattern_gen:
print(pattern)
1.4 应用场景示例
1.4.1 处理大数据集
"""
1)处理大数据集
"""
def read_large_file(file_path):
with open(file_path, 'r') as file:
for line in file:
yield line
# 使用生成器遍历大文件
for data in read_large_file('large_data.txt'):
process_data(data)
1.4.2 无限序列
"""
无限序列
实现斐波那契数列
"""
def fibonacci():
a, b = 0, 1
while