Python 的惰性求值與惰性序列

惰性求值

在編程語言理論中,惰性求值(英語:Lazy Evaluation),又譯爲惰性計算、懶惰求值,也稱爲傳需求調用(call-by-need),是一個計算機編程中的一個概念,它的目的是要最小化計算機要做的工作。它有兩個相關而又有區別的含意,可以表示爲“延遲求值”和“最小化求值”。

  1. 避免不必要的計算,帶來性能的提升(最小化求值)。 

對於Python中的條件表達式 if x and y,在x爲false的情況下y表達式的值將不再計算。而對於if x or y,當x的值爲true的時候將直接返回,不再計算y的值。因此編程中可以利用該特性,在 and邏輯中,將小概率發生的條件放在前面或者在or邏輯中,將大概率發生的時間放在前面,有助於性能的提升。

     2. 節省空間,使得無線循環的數據結構成爲可能(延遲求值)。 

延遲求值特別用於函數式編程語言中。在使用延遲求值的時候,表達式不在它被綁定到變量之後就立即求值,而是在該值被取用的時候求值。延遲求值的一個好處是能夠建立可計算的無限列表而沒有妨礙計算的無限循環或大小問題。例如,可以建立生成無限斐波那契數列表的函數(經常叫做“流”)。第n個斐波那契數的計算僅是從這個無限列表上提取出這個元素,它只要求計算這個列表的前n個成員。

惰性序列

Python的惰性序列多數指 iterator,其特點正如同上文所述,具有惰性計算特點的序列稱爲惰性序列。 
Python的iterator是一個惰性序列,意思是表達式和變量綁定後不會立即進行求值,而是當你用到其中某些元素的時候纔去求某元素對的值。 惰性是指,你不主動去遍歷它,就不會計算其中元素的值。 

一句話理解:

迭代器的一個優點就是它不要求你事先準備好整個迭代過程中所有的元素。

迭代器僅僅在迭代至某個元素時才計算該元素,而在這之前或之後,元素可以不存在或者被銷燬。

這個特點使得它特別適合用於遍歷一些巨大的或是無限的集合,比如幾個G的文件,或是斐波那契數列等等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章