怎样理解Python迭代器和生成器?
在 Python 中一切皆对象,对象的抽象就是类,而对象的集合就是容器。python中列表、组、字典、集合都是容器。python中所有的容器都是可以迭代的,这点和枚举有着本质区别。
迭代器就是用于迭代操作的对象,它像列表一样可以迭代获取其中的每一个。它与我们平时使用for循环遍历列表中所有元素的区别在于,构建迭代器的时候,不像列表把所有元素一次性加载到内存,而是以一种延迟计算方式返回元素,这就是我们前面所说,为什么可以极大的减小内存的占用。它是等到调用next方法时候才返回该元素(本质上 for 循环就是不断地调用迭代器的next方法)。
Python使用生成器对延迟操作提供了支持。所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果。这也是生成器的主要好处。生成器则是提供了一种延迟操作,其不用return返回结果,而是使用。生成器函数就是常规函数的定义,但是,使用语句而不是return语句返回结果。语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行。
我们写python代码使用的for in 语句就是将上述迭代过程隐式化 ,生成器是特殊和高级的迭代器,并不会像迭代器一样占用大量内存,只有在被使用的时候才会调用产生相应的对象,可以降低内存占用、优化程序结构、提高程序速度。