今天给大家介绍一下生成器和yield的使用。通过以下8、9个小问题,相信你会对它们有一个新的认识。1.什么是可迭代对象?可迭代对象,英文Iterable,是一个形容词。这种类型的对象类似于Java语言。可以看做是一种接口,抽象描述了事物的能力。所以,Iterable天然就具备了迭代的能力。如下,常见的list、Iterator等都是Iterable对象:In[33]:fromcollections.abcimportIterable,IteratorIn[34]:issubclass(list,Iterable)Out[34]:TrueIn[35]:issubclass(Iterator,Iterable)2。什么是发电机?生成器是可迭代的(Iterable),创建生成器最简单的方法是通过一对(),如下:In[37]:g=(i*iforiin[1,4,0])In[38]:gOut[38]:at0x7fe8956e96d0>g是一个生成器对象,生成器对象获取生成器对象的元素,可以使用next函数,如下图,获取第一个元素:在[39]中:next(g)Out[39]:1获取第二个元素:In[40]:next(g)Out[40]:163。创建生成器有多少种方法?见上文,使用pair()创建生成器对象。另外,大家一定知道,使用了关键字yield。yield出现在一个函数中,当它运行到yield时,返回的对象是一个generator对象。4.生成器是迭代器吗??生成器对象(generatorobject)也必须是一个迭代器对象(Iteratorobject),比如上面的生成器g,使用内置函数isinstance进行验证,返回True:In[43]:isinstance(g,Iterator)Out[43]:True因此,它具有迭代器的所有特性。我们在上一个主题中讨论了迭代器。元素而不必将所有元素加载到RAM中,因为它具有内存效率。生成器也具有这些属性。此外,它还有一些独特的功能,如下面的yield所示。5.如何用一句话形容yield?yield关键字的用法也是stackoverflow上最热门的问题之一,借用一个最热门答案的解释:yield是一个关键字,用法和return一样,只是函数会返回一个generator。yield是一个特殊的return,返回一个生成器对象。老实说,了解这些只是表面现象。那么,如何掌握yield的用法呢?6、如何掌握yield的用法?想要掌握yield,首先要搞清楚一件事:当你用yield调用一个函数时,这个函数并没有执行任何一行,而是返回一个generated为了帮助大家理解,用yield创建一个函数:defgfun():mylist=range(3)foriinmylist:yieldi*ig=gfun()print(g)为了加深印象,大家可以自己调试验证一下,函数第一行打的断点一直不打。带有yield的函数与for结合使用。第一次调用上一步创建的生成器对象后,会进入函数体,直到遇到yield的返回值。然后,当for循环再次进入函数时,直接进入下一句yield。直到生成器对象变空。用下面的代码演示上面yield的过程:defcreateGenerator():mylist=range(3)foriinmylist:yieldi*iprint(i*i)g=createGenerator()print(g)forgiing:pass参考记录gif:7。yield两者的重要值是什么?Python引入yield后,具备了实现协程的能力。协程确实是一种高效的编程模型。协程的理解后面会详细讲。包括异步等更高级的功能,基础是yield.8。还提到了yield和itertoolsyield的重要性和广泛使用。现在,Python有一个单独的模块专门用于管理迭代器和生成器对象,这就是itertools,它封装了方法属性,稍后讨论。9.Yield用例yield实现浮点数step的frange:deffrange(start,end,step):i=startwhilei