要理解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是一个对象!
