在 Python 3 中,range() 函數產生一個表示數字範圍的物件。該物件與傳統生成器的不同之處在於它不會在記憶體中創建整個範圍。相反,它會按需產生數字,從而在大範圍內顯著更快。
問題:
直觀上,判斷數字是否落在某個範圍內需要迭代該範圍內的所有值。然而,Python 3 range() 物件透過幾乎即時執行此類檢查來違背這一期望,即使對於很大的範圍也是如此。
解決方案:
range() 物件不物理儲存整個範圍。相反,它保存開始、結束和步驟值。在測試成員資格時,它僅根據這些值計算結果。此計算是用 C 程式碼執行的,這有助於其高效率。
比較:
以下Python 程式碼將range() 物件的效能與動態產生數字的自訂實作:
def my_crappy_range(N): i = 0 while i < N: yield i i += 1 1_000_000_000_000_000 in range(1_000_000_000_000_001) 1_000_000_000_000_000_000_000 in range(1_000_000_000_000_000_000_001) for number in my_crappy_range(100): print(number)
range( )物件幾乎立即執行檢查,而自訂實作則需要花費大量時間
其他最佳化:
range() 物件也實作了一個contains 鉤子來優化包含測試。這種最佳化允許物件在接近恆定的時間內確定一個數字是否在其範圍內,而不管範圍的大小。
結論:
Python 3 範圍( ) 物件的卓越速度源自於其高效的資料結構和最佳化的操作。它儲存最少的資訊並即時計算所需的值,即使在巨大的範圍內也能實現幾乎即時的遏制測試。
以上是Python 的「range()」物件如何實現超大範圍的近乎即時的成員資格檢查?的詳細內容。更多資訊請關注PHP中文網其他相關文章!