仍旧 参考文章

Python 中 yield 的用法很像 return,都是提供一个返回值,但是 yield 和 return 的最大区别在于,return 一旦返回,则代码段执行结束,但是 yield 在返回值以后,会交出 CUP 的使用权,代码段并没有直接结束,而是在此处中断,当调用 send() 或者 next() 方法之后,yield 可以从之前中断的地方继续执行。

在一个函数中,使用 yield 关键字,则当前的函数会变成生成器。

下面生成一个斐波那契数列。

def fib(n):
    index = 0
    a = 0
    b = 1

    while index < n:
        yield b
        a,b = b, a+b
        index += 1

生成器对象:

fib = fib(100)
print(fib)

打印出来的结果是一个生成器对象,并没有直接把我们想要的值打印出来。

<generator object fib at 0x7fef20062ac0>