python之生成器与迭代器
生成器
列表生成式:li = [i for i in range(10)]
将列表生成式中[]换成()即为生成器generator
生成器保存的对象不是具体的数,而是一种算法,一种推导式,调用__next__()可以计算出下一个元素,没有更多的元素时,抛出StopIteration
的错误
迭代器
可以直接作用于for
循环对象成为可迭代对象,即Iterable,可迭代对象一类是集合数据类型,如list
、tuple
、dict
、set
、str
等;另一类一类是generator
,
包括生成器和带yield
的generator function;
可以使用isinstance()
判断一个对象是否是Iterable
对象;
生成器都是迭代器;
总结
凡是可作用于for
循环的对象都是Iterable
类型;
可以被next()方法调用,并不断返回下一个值的对象成为迭代器对象;
凡是可作用于next()
函数的对象都是Iterator
类型,它们表示一个惰性计算的序列;
集合数据类型如list
、dict
、str
等是Iterable
但不是Iterator
,不过可以通过iter()
函数获得一个Iterator
对象。