可迭代对象(iterable)、迭代器(iterator)、生成器(generator)
【可迭代对象】
只要一个对象的方法中,有__iter__方法,那么这个对象就是一个可迭代对象。如下图:
【迭代器】
如果一个对象中,有__next__方法和__iter__方法,那么这个对象就是一个迭代器。创建迭代器可以通过iter()函数。如下图:
迭代器特性:
迭代器对象为一次性消费,用完不可再生,如下图:
如果要再使用,需要重新获取迭代器;
【生成器】
如果一个函数至少包含一个yield声明(当然它也可以包含其他yield或return),那么它就是一个生成器。
yield和return都会让函数返回一些东西,区别在于,return声明彻底结束一个函数,而yield声明是暂停函数,保存它的所有状态,并且后续被调用后会继续执行。
任何使用了yield的函数就是生成器,生成器就是一个返回迭代器的函数,或者说生成器就是一个迭代器。如下图:
生成器函数:
和其他函数编写方式相同,但是使用yield语句一次返回一个结果;
生成器函数被调用的时候并不会立即执行,可以通过next()函数对生成器函数返回的对象进行迭代;
生成器函数每当执行到yield语句时,生成器函数会暂停并保存当前函数内的所有变量和状态,等待下次调用时从当前状态继续执行。
生成器有两种表示:
生成器表达式:
生成器表达式是用圆括号来创建生成器,其语法与推导式相同,只是将 [] 换成了 () 。 生成器表达式会产生一个新的生成器对象。如图:
生成器函数:
待完善。。。。。。。。。。。。。。