Menu
CoddyTech

生成器表达式

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 中的各种数据处理任务创建高效且节省内存的迭代器。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

challenge icon

挑战

简单

创建一个生成器表达式,用于筛选并转换一串数字。该生成器应生成给定范围内所有偶数的平方。

已提供以下内容:

  • 两个作为输入的整数:start 和 end(包含端点)

你的任务是:

  1. 创建一个生成器表达式,以便:
    • 遍历从 start 到 end 的范围(包含端点)
    • 筛除奇数
    • 计算剩余偶数的平方
  2. 在循环中使用生成器表达式,将每个结果值打印在新的一行

输入将以两个用空格分隔的整数提供,分别表示 start 和 end。

亲手试试

# 读取输入
start, end = map(int, input().split())

# TODO: 在这里创建你的生成器表达式
generator_exp = None  # 用你的生成器表达式替换 None

# 打印结果
for value in generator_exp:
    print(value)

Python 迭代器中的所有课

自己练习: Python 在线编译器