可迭代对象(iterable)、迭代器(iterator)、生成器(generator)

【可迭代对象】

  只要一个对象的方法中,有__iter__方法,那么这个对象就是一个可迭代对象。如下图:

img

【迭代器】

如果一个对象中,有__next__方法和__iter__方法,那么这个对象就是一个迭代器。创建迭代器可以通过iter()函数。如下图:

img

迭代器特性:

迭代器对象为一次性消费,用完不可再生,如下图:

  如果要再使用,需要重新获取迭代器;

img

【生成器】

如果一个函数至少包含一个yield声明(当然它也可以包含其他yield或return),那么它就是一个生成器。

yield和return都会让函数返回一些东西,区别在于,return声明彻底结束一个函数,而yield声明是暂停函数,保存它的所有状态,并且后续被调用后会继续执行。

任何使用了yield的函数就是生成器,生成器就是一个返回迭代器的函数,或者说生成器就是一个迭代器。如下图:

img

生成器函数:

和其他函数编写方式相同,但是使用yield语句一次返回一个结果;

生成器函数被调用的时候并不会立即执行,可以通过next()函数对生成器函数返回的对象进行迭代;

生成器函数每当执行到yield语句时,生成器函数会暂停并保存当前函数内的所有变量和状态,等待下次调用时从当前状态继续执行。

img

 生成器有两种表示:

生成器表达式:

生成器表达式是用圆括号来创建生成器,其语法与推导式相同,只是将 [] 换成了 () 。 生成器表达式会产生一个新的生成器对象。如图:

img

生成器函数:

img

待完善。。。。。。。。。。。。。。

posted @ 2020-08-18 09:43  匿名好友  阅读(256)  评论(0编辑  收藏  举报