要理解yield的作用,必须先理解什么是生成器。在了解生成器之前,您必须了解迭代器。1.迭代器当你创建一个列表时,你可以一个一个地读取它的项目。逐项读取其项目称为迭代:mylist是一个可迭代对象。当您使用列表理解时,您创建了一个列表,因此创建了一个迭代器:您可以使用“for...in...”的所有内容都是一个迭代器,包括列表、字符串、文件...等。这些迭代器非常方便,因为你可以随心所欲地读取它们,但是你将所有的值都存储在内存中,当你有很多值时,这是一种巨大的内存浪费。为了解决这类问题,Python有了生成器的概念。2.生成器生成器是一个迭代器,这个迭代器只能迭代一次。生成器不会将所有值存储在内存中,它们是动态生成的:它类似于列表理解,只需使用()而不是[]。但是,你不能在mygenerator中对i做第二次,因为生成器只能使用一次:它打印(0),然后不管它,打印(1),最后4。3.Yieldield是一个类似的return关键字,只是函数将返回一个生成器。仔细阅读下面的示例后,您应该能够完全理解。该函数将返回一组只需要读取一次的值。如果你能清楚地理解这个特性并将其应用到你的代码中,它可能会大大提高性能。下次我们会介绍什么时候使用它。注意例子中的第6行,函数体中写的代码在调用函数时并没有运行。该函数只是返回生成器对象,不要忘记这一点。最后,每次使用生成器时,您的代码都会从中断处继续。所以例子中第二次使用了生成器,我们的生成器就完全没有任何价值了。所以核心逻辑是这样的:当for函数第一次调用从函数创建的生成器对象时,会从头开始运行函数中的代码,直到到达yield,并返回循环的第一个值。随后的调用都会再次运行你在函数中编写的循环并产生下一个值,直到没有更多的值可以返回,就像我们上面的例子一样
