用 yield 产生结果
函数中出现 yield 后,调用函数会获得生成器。开始迭代时才执行函数体;每次遇到 yield,返回一个值并暂停,下一次迭代从暂停处继续。
def squares(limit):
for number in range(limit):
yield number * number
for value in squares(4):
print(value)
输出依次为 0、1、4、9。这里不需要先建立包含所有平方数的列表。
生成器会被消耗
values = squares(3)
print(list(values)) # [0, 1, 4]
print(list(values)) # []
如果需要重新遍历,就重新调用 squares(3)。生成器适合逐条处理数据,但不会自动保留已经产生的全部结果。
动手试一试
将函数改为依次产生小于 limit 的偶数,再用循环输出。




























