Python 生成器:需要时再产生数据

用 yield 按需返回结果,理解生成器的暂停与继续。

用 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 的偶数,再用循环输出。

在笔记里找一找

输入关键词,查找相关文章

↑ ↓ 选择文章 · Enter 打开文章 · Esc 关闭