Image Description

如果创建一个包含10万个元素的列表,会占用很大的内存存储空间,如果列表内的元素可以按照某种算法推算出来,就可以在循环的过程中不断算出后续的元素。这样就不用创建完整的list,从而节省内存空间。

Python中这种一边循环一边计算的机制,叫做生成器(generator)。使用了 yield的函数被称为生成器。

生成器是一个返回迭代器的函数,只能用于迭代操作。在调用的过程中,每次遇到yield时,函数会暂停并保存所有运行信息,返回yield值。在下一次执行next()方法时从当前位置继续运行。

代码示例

#计算斐波那契数列
# -*- coding: UTF-8 -*-
def fibon(n):
    a = b = 1
    for i in range(n):
        yield a
        a, b = b, a + b

# 引用函数
for x in fibon(1000000):
    print(x , end = ' ')

Generator 生成器的函数,在每次调用 next() 的时候执行,遇到 yield语句返回,再次执行时从上次返回的 yield 语句处继续执行。