当前位置: 首页 > 后端技术 > Python

Python中Yield关键字的作用

时间:2023-03-26 19:40:11 Python

要理解yield的作用,必须先理解什么是生成器。在了解生成器之前,您必须了解迭代器。迭代器当你创建一个列表时,你可以一个一个地读取它的项目。逐项读取其项目称为迭代:>>>mylist=[1,2,3]>>>foriinmylist:...print(i)123mylist是一个可迭代对象。当你使用列表理解时,你创建了一个列表,因此创建了一个迭代器:>>>mylist=[x*xforxinrange(3)]>>>foriinmylist:...print(i)014All您可以使用“for...in...”是迭代器,包括列表、字符串、文件...等。这些迭代器很方便,因为你可以随心所欲地读取它们,但是你将所有的值都存储在内存中,当你有很多值时,这是一种巨大的内存浪费。生成器生成器是只能迭代一次的迭代器。生成器不会将所有值存储在内存中,它们是动态生成的:>>>mygenerator=(x*xforxinrange(3))>>>foriinmygenerator:...print(i)014它类似于列表推导式,只是将[]替换为()。但是,你不能在myGenerator中对i进行第二次调用,因为生成器只能使用一次:它print(0),然后不管它,print(1),最后4。yielyield是一个关键字,类似于return,除了函数将返回一个生成器。>>>defcreateGenerator():...mylist=range(3)...foriinmylist:...yieldi*i...>>>mygenerator=createGenerator()#创建一个生成器>>>print(mygenerator)#mygenerator是一个对象!>>>foriinmygenerator:...print(i)014你只需要知道函数会返回一组只需要读取一次的值,理解这个特征清晰并在正确的地方使用它会大大提高性能。下次我们会介绍什么时候使用它。要掌握yield,你必须明白写在函数体内的代码不会在函数被调用时运行。该函数只返回生成器对象,这有点棘手:-)然后每次使用生成器时,您的代码都会从中断的地方继续。现在是困难的部分:for函数第一次调用从函数创建的生成器对象时,它将从头开始运行函数中的代码,直到到达yield,然后返回循环的第一个值。相互调用然后会再次运行你在函数中编写的循环并返回下一个值,直到没有更多的值可以返回,就像我们上面的例子一样。这是我们文章的结尾。如果你今天想要我们的Python教程,请继续关注我们。如果对您有帮助,请点击下方的赞/观看。有什么问题可以在下方留言区留言,我们会耐心解答!Python实战宝典(pythondict.com)不只是一个合集欢迎关注公众号:Python实战宝典原文来自Python实战宝典:PythonYield关键字的作用