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文件執行 。

    推薦閱讀