Python生成器,python生成器

怎样理解Python迭代器和生成器?

Python生成器,python生成器


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


C语言其实是一种比较“古老”而且“底层”的语言 。其执行效率,仅次于汇编语言 。说其古老,是因为C语言的出现很早 。虽然Fortran、Cobol语言出现比C语言更早,但是现代主流操作系统(Windows、Mac Os、linux、iOS、Android、Unix)全部脱胎于C语言 。说它底层,是因为C语言设计之初就是为了同时编写汇编语言 。
理论上可以全部用汇编写 。而汇编语言是执行效率最高的语言 。所以Python用C语言写一点也不奇怪 。这和它能不能生成Exe一点关系都没有 。Exe文件是Windows平台的私有格式 。最简单的Exe是Com可执行文件 。Exe文件实际上是一个引导程序 一个解释程序组成的 。Python语言生成的代码,只需要配以引导程序和解释程序,就可以作为Exe文件执行 。

    推荐阅读