python 迭代器和生成器
迭代器
可以用在for语句进行循环的对象就是可迭代对象。通过for语句一次循环取出每一个元素,这种容器就是迭代器。除了用for,迭代器还可以通过next()方法逐一读取下一个元素。
为容器对象添加__next__()和__iter__()方法。 __iter__()返回迭代器对象本身,__next__()返回每次调用next()或迭代的对象。
创建迭代器对象的好处是当序列长度很大时,可以减少内存消耗,每次只需要记录一个值即可。
迭代就是从迭代器中取元素的过程。
生成器
生成器通过yiled语句生成生成器,yield可以让普通函数变成一个生成器,
生成器也是一种迭代器,但是只能对其迭代一次,因为它们并没有把所有值存在内存中,而是在运行时生成值。
大多数生成器是以函数来实现的。它们并不返回一个值,而是yiled一个值。
一种更直观的解释是:程序执行到 yield
会返回值并暂停,再次调用 next()
时会从上次暂停的地方继续开始执行
参考: