答案页 · 12 道题

Python 生成器练习答案

本页汇总 Python 生成器 的 12 道练习。先做练习页,再回到这里核对准确答案和原因。

快速答案

本答案页包含 Python 生成器 的 4 道选择题、4 道填空题和 4 道输出预测题,每题都给出准确答案和简短解释。

答案已完整展示,建议先尝试作答,再用本页核对。第一次练习最好从互动练习页开始。

01 · 选择题

生成器函数里的 yield 会做什么?

  1. 删除函数
  2. 暂停并产生一个值正确答案
  3. 立刻抛出 StopIteration
  4. 把结果转换成列表

答案: 暂停并产生一个值

为什么: yield 把一个值交给调用方,并暂停函数。

02 · 选择题

代码的输出结果是什么?

def gen():
    yield 1
    yield 2
print(list(gen()))
  1. 1 2
  2. [1, 2]正确答案
  3. [0, 1]
  4. <generator object>

答案: [1, 2]

为什么: list 会消费两个 yield 出来的值并构建列表。

03 · 选择题

调用生成器函数会返回什么?

  1. None
  2. 包含全部值的列表
  3. 生成器对象正确答案
  4. 第一个 yield 的值

答案: 生成器对象

为什么: 只有推进生成器时函数体才会运行。

04 · 选择题

next() 到达生成器末尾时会发生什么?

  1. 抛出 ValueError
  2. 抛出 StopIteration正确答案
  3. 重新启动生成器
  4. 永远返回 None

答案: 抛出 StopIteration

为什么: StopIteration 表示生成器已经没有更多值。

05 · 填空题

补全一次产生一个值的关键字。

def one():
    ____ 1
print(next(one()))

答案: yield

为什么: yield 会产生一个值并暂停函数。

06 · 填空题

补全取出下一个值的内置函数。

def one():
    yield 1
value = ____(one())
print(value)

答案: next

为什么: next 会向生成器请求下一个值。

07 · 填空题

补全把生成器变成列表的函数。

def gen():
    yield 1
print(____(gen()))

答案: list

为什么: list 会消费生成器并生成列表。

08 · 填空题

补全消费这些平方值的函数。

print(____(n * n for n in range(4)))

答案: sum

为什么: sum 会把生成器表达式产生的每个值相加。

09 · 输出预测

屏幕上会显示什么?

print(list(n for n in range(3)))

答案: [0, 1, 2]

为什么: 生成器表达式产生 0、1、2,list 把它们收集起来。

10 · 输出预测

这段代码会输出什么?

def g():
    yield "a"
print(next(g()))

答案: a

为什么: next 取出第一个 yield 的字符串 a。

11 · 输出预测

运行结果是什么?

def g():
    yield 1
    yield 2
x = g()
print(next(x), next(x))

答案: 1 2

为什么: 两次 next 调用分别返回一和二,打印在同一行。

12 · 输出预测

这段程序打印出什么?

def g():
    for n in range(3):
        yield n * 2
print(list(g()))

答案: [0, 2, 4]

为什么: 生成器产生 0、2、4,list 显示这些值。

先试一遍题目

打开 Python 生成器 练习页,用即时反馈回答同样的 12 道题。

练习本课