
函數語言程式設計 - 惰性求值
惰性求值是一種求值策略,它會延遲表示式的求值,直到需要它的值為止。它避免了重複求值。Haskell就是一個很好的例子,這種函數語言程式設計語言的基礎就是惰性求值。
惰性求值用於Unix對映函式以提高其效能,方法是從磁碟載入僅需的頁面。不會為其餘頁面分配記憶體。
惰性求值 - 優點
它允許語言執行時丟棄與表示式最終結果沒有直接關聯的子表示式。
它透過丟棄臨時計算和條件語句來減少演算法的時間複雜度。
它允許程式設計師在初始化資料結構的元件後,以任意順序訪問它們,只要它們沒有迴圈依賴關係。
它最適合載入不常訪問的資料。
惰性求值 - 缺點
它迫使語言執行時透過建立thunk(延遲物件)來保持子表示式的求值,直到它在最終結果中需要為止。
有時它會增加演算法的空間複雜度。
很難找到它的效能,因為它在執行之前包含表示式的thunk。
使用Python進行惰性求值
Python中的range方法遵循惰性求值的理念。它節省了較大範圍的執行時間,並且我們不需要一次獲取所有值,因此也節省了記憶體消耗。請看下面的例子。
r = range(10) print(r) range(0, 10) print(r[3])
它將產生以下輸出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 3
廣告