包含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