生成器 generator
生成器有两种,一种是列表推导的 [] 换成 () 就变成了生成器对象,另一种是 使用for遍历 含yield关键字的函数。普通函数是顺序执行,遇到return或者最后一句时返回,而生成器(generator),遇到next()函数时执行,遇到yield时返回,再次执行时从上次执行的yield处继续执行,直到遇到 StopIteration异常时停止 。实际中并不会使用next,而是使用for来循环执行这个generator。
生成器在循环时并不是生成整个列表,而是按定义的计算方式,不断推算,从而节省内存空间。
可迭代对象 Iterable
可作用于for循环的有两类,一类是集合数据类型(如list、dict等),另一类是生成器,这两类都称为可迭代对象(Iterable)。
迭代器 Iterator
可被next函数调用,并不断返回下一个值的对象称为迭代器(Iterator),list、dict本身并不是Iterator,但可使用iter()函数将其变为Iterator。Iterator在需要返回时才会计算(惰性计算),是一种数据流,可以无限大。
分别使用迭代器对象和生成器实现可迭代对象