包含yield语句的函数,可以创造出生成器。什么叫生成器呢?生成器英文名为generator(发生器)。那么这个玩意能生成什么东西呢?

可以片面理解为一只听话的可以随时下蛋的老母鸡,且每次下的蛋不一定一样。

当你只需要生产一个鸡蛋时,用return返回一个值就可以了。

但当你当前需要一个蛋,之后可能需要下一个蛋时,就需要用yield了。

 

yield语句和return语句相似,都用来从函数中返回值。

与return不同的是,return语句一旦执行会立即结束函数的执行,

而每次执行到yield语句并返回一个值之后,会暂停或挂起后面代码的执行

下次通过生成器对象__next__()方法、内置next()、for()循环遍历生成器对象元素时恢复执行

 

生成器具有惰性求值(让它下蛋才下蛋)的特点。

例子:

def f():         #定义一个斐波那契求值
    a, b = 1, 1
    while True:
        yield a     #返回a值,挂起之后的操作
        a, b = b, a + b    #通过next方法调用,a会不断增大,第一次为1,第二次为a+b,依次叠加前两个值



egg = f()
for i in range(10):
    print(egg.__next__(), end=' ')    #通过__next__()循环调用10次f()函数并打印返回值


print("\n-----------------------------------------\n") for i in f(): if i > 100: print(i, end=' ') #打印第一个达到大于100条件的返回值 break

结果为:

1 1 2 3 5 8 13 21 34 55 
-----------------------------------------

144