生成器表达式
Coddy Python 迭代器 课程的第 9 课,共 13 课。
生成器表达式是在 Python 中创建迭代器的简洁方式。它比列表推导式更节省内存,尤其适用于处理大型数据集或无限序列。
生成器表达式的语法
生成器表达式的语法与列表推导式类似,但使用圆括号而不是方括号:
(expression for item in iterable if condition)主要特点
- 惰性求值:生成器表达式每次只生成一个项,并且仅在需要时生成,从而节省内存。
- 一次性迭代器:迭代器耗尽后,无法重复使用,除非重新创建生成器。
- 语法简洁:可以用紧凑的方式定义简单的生成器函数。
使用示例
下面是一个简单的生成器表达式示例,它会生成平方数:
squares = (x**2 for x in range(5))
for square in squares:
print(square) # 输出:0, 1, 4, 9, 16
与列表推导式的比较
虽然语法相似,但生成器表达式和列表推导式在内存使用上有所不同:
# 列表推导式(在内存中创建完整的列表)
squares_list = [x**2 for x in range(1000000)]
# 生成器表达式(创建一个生成器对象)
squares_gen = (x**2 for x in range(1000000))
生成器表达式不会一次性创建所有值,因此更加节省内存。
适用场景
生成器表达式在以下场景中特别有用:
- 处理大型数据集
- 处理数据流
- 创建数据管道
使用生成器表达式,你可以为 Python 中的各种数据处理任务创建高效且节省内存的迭代器。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
挑战
简单创建一个生成器表达式,用于筛选并转换一串数字。该生成器应生成给定范围内所有偶数的平方。
已提供以下内容:
- 两个作为输入的整数:
start和end(包含端点)
你的任务是:
- 创建一个生成器表达式,以便:
- 遍历从
start到end的范围(包含端点) - 筛除奇数
- 计算剩余偶数的平方
- 遍历从
- 在循环中使用生成器表达式,将每个结果值打印在新的一行
输入将以两个用空格分隔的整数提供,分别表示 start 和 end。
亲手试试
# 读取输入
start, end = map(int, input().split())
# TODO: 在这里创建你的生成器表达式
generator_exp = None # 用你的生成器表达式替换 None
# 打印结果
for value in generator_exp:
print(value)Python 迭代器中的所有课
自己练习: Python 在线编译器