当前位置: 首页 > 科技观察

Python中的yield到底是什么?

时间:2023-03-12 09:01:27 科技观察

相信大家已经不止一次在函数中看到关键字yield了。它有什么作用?它返回什么?和返现有什么区别?本文将揭开yield的神秘面纱,并给出一个最简单易懂的例子。yield关键字有什么作用?如果对yield不是很了解,可以先把yield看成是return的同胞。它们都用在函数中,履行返回某种结果的责任。两者的区别在于:带return的函数直接返回所有结果,程序终止不再运行,并销毁局部变量;而带有yield的函数返回一个可迭代的生成器(generator)对象,你可以使用for循环或调用next()方法迭代生成器对象以提取结果。什么是发电机?在Python中,使用yield的函数称为生成器。感觉有点像套娃,但事实就是如此。调用yield函数将返回一个生成器对象。在调用generator函数的过程中,每次遇到yield时,该函数都会暂停并保存当前所有运行信息(保留局部变量),返回yield的值,并在next()方法时从当前位置继续运行下次执行,直到遍历完生成器。先看一个简单的例子:上面的函数返回一个生成器,现在遍历生成器:或者调用next()方法:可以看到,simple_generator函数返回一个生成器,调用next()方法后,函数开始运行,遇到第一个yield关键字时,返回生成值(1),程序暂停;第二次调用next()方法时,代码从上次暂停的位置开始执行,遇到第二个yield关键字,然后返回生成的值(2),程序暂停;第三次调用也是如此,返回生成值(3),生成器耗尽,程序终止;到这里你可能就明白yield和return的关系和区别了,带yield的函数就是一个generator。这个生成器有个方法叫做next,相当于“下一步”生成的数字。所以在调用next的时候,generator不会从函数的开头开始执行,而只是从上一步停止的地方开始执行,然后遇到yield后,返回要生成的数,这一步结束。一个经典的例子是使用yield生成斐波那契数列:deffab(max):n,a,b=0,0,1while