Python惰性序列

2022-09-18 10:48:29 字數 1207 閱讀 7571

python的iterator就是乙個惰性序列,要說明什麼是惰性序列,首先我們得知道什麼是惰性計算。

事實上,很多如j**a在內的高階語言都支援惰性序列。

引自維基百科:

在程式語言理論中,惰性求值(英語:lazy evaluation),又譯為惰性計算、懶惰求值,也稱為傳需求呼叫(call-by-need),是乙個計算機程式設計中的乙個概念,它的目的是要最小化計算機要做的工作。它有兩個相關而又有區別的含意,可以表示為「延遲求值」和「最小化求值」,本條目專注前者,後者請參見最小化計算條目。除可以得到效能的提公升外,惰性計算的最重要的好處是它可以構造乙個無限的資料型別。

延遲求值特別用於函式式程式語言中。在使用延遲求值的時候,表示式不在它被繫結到變數之後就立即求值,而是在該值被取用的時候求值,也就是說,語句如x:=expression; (把乙個表示式的結果賦值給乙個變數)明顯的呼叫這個表示式被計算並把結果放置到x中,但是先不管實際在x中的是什麼,直到通過後面的表示式中到x的引用而有了對它的值的需求的時候,而後面表示式自身的求值也可以被延遲,最終為了生成讓外界看到的某個符號而計算這個快速增長的依賴樹。

延遲求值的乙個好處是能夠建立可計算的無限列表而沒有妨礙計算的無限迴圈或大小問題。例如,可以建立生成無限斐波那契數列表的函式(經常叫做「流」)。第n個斐波那契數的計算僅是從這個無限列表上提取出這個元素,它只要求計算這個列表的前n個成員。

python的惰性序列多數指iterator,其特點正如同上文所述,具有惰性計算特點的序列稱為惰性序列。

博主的解讀:python的iterator是乙個惰性序列,意思是表示式和變數繫結(比如:呼叫iter()得到了乙個iterator並賦值給乙個變數)後不會立即進行求值,而是當你用到其中某些元素的時候才去求某元素對的值(比如next()訪問到某元素才去實際計算某元素的值)。

惰性是指,你不主動去遍歷它,就不會計算其中元素的值。

有什麼意義?

一是這樣我們就可以實現的無限序列的表示,比如全部的自然數(無窮盡),而不需要真的在記憶體中計算出所有的自然數(那根本不可能,因為記憶體也不是無限的),而是需要哪個數,計算到哪個數,或者需要哪些數,計算到那些數(比如前1000個)。

二是在大規模資料處理中起到延遲計算的作用。當你處理大規模資料時,一次性進行處理往往是不方便的。而惰性序列就可以解決這個問題,它把計算的步驟延遲到了要實際使用該資料的時候。

惰性序列可以看作是乙個」流」,需要的時候從其中取一滴水。

python 中惰性實現

設計 iterator 介面時考慮到了惰性 next my iterator 一次生成乙個元素。懶惰的反義 詞是急迫,其實,惰性求值 lazy evaluation 和及早求值 eager evaluation 是程式語言 理論方面的技術術語。目前之前部落格的幾版sentence類都不具有惰性,因為...

Python學習 django惰性機制

django惰性機制 所謂惰性機制 publisher.objects.all 或者.filter 等都只是返回了乙個queryset 查詢結果集物件 它並不會馬上執行sql,而是當呼叫queryset的時候才執行。惰性機制之可迭代 objs models.book.objects.all obj1...

惰性程式設計和惰性求值

惰性程式設計是一種將對函式或請求的處理延遲到真正需要結果時進行的通用概念。有很多應用程式都採用了這種概念,有的非常明顯,有些則不太明顯。從惰性程式設計的角度來思考問題,可以幫您消除 中不必要的計算,也可以幫您重構程式以使之更加面向問題。scheme 中的簡單惰性程式設計 惰性程式設計是這樣一種技術 ...