快速答案
本答案页包含 Python 生成器 的 4 道选择题、4 道填空题和 4 道输出预测题,每题都给出准确答案和简短解释。
答案已完整展示,建议先尝试作答,再用本页核对。第一次练习最好从互动练习页开始。
生成器函数里的 yield 会做什么?
答案: 暂停并产生一个值
为什么: yield 把一个值交给调用方,并暂停函数。
代码的输出结果是什么?
def gen():
yield 1
yield 2
print(list(gen()))答案: [1, 2]
为什么: list 会消费两个 yield 出来的值并构建列表。
调用生成器函数会返回什么?
答案: 生成器对象
为什么: 只有推进生成器时函数体才会运行。
next() 到达生成器末尾时会发生什么?
答案: 抛出 StopIteration
为什么: StopIteration 表示生成器已经没有更多值。
补全一次产生一个值的关键字。
def one():
____ 1
print(next(one()))答案: yield
为什么: yield 会产生一个值并暂停函数。
补全取出下一个值的内置函数。
def one():
yield 1
value = ____(one())
print(value)答案: next
为什么: next 会向生成器请求下一个值。
补全把生成器变成列表的函数。
def gen():
yield 1
print(____(gen()))答案: list
为什么: list 会消费生成器并生成列表。
补全消费这些平方值的函数。
print(____(n * n for n in range(4)))答案: sum
为什么: sum 会把生成器表达式产生的每个值相加。
屏幕上会显示什么?
print(list(n for n in range(3)))答案: [0, 1, 2]
为什么: 生成器表达式产生 0、1、2,list 把它们收集起来。
这段代码会输出什么?
def g():
yield "a"
print(next(g()))答案: a
为什么: next 取出第一个 yield 的字符串 a。
运行结果是什么?
def g():
yield 1
yield 2
x = g()
print(next(x), next(x))答案: 1 2
为什么: 两次 next 调用分别返回一和二,打印在同一行。
这段程序打印出什么?
def g():
for n in range(3):
yield n * 2
print(list(g()))答案: [0, 2, 4]
为什么: 生成器产生 0、2、4,list 显示这些值。
先试一遍题目
打开 Python 生成器 练习页,用即时反馈回答同样的 12 道题。