Python 3 中range(n) 的驚人性能
在Python 3 中,範圍產生器函數以其卓越的速度而聞名檢查其範圍內大量的成員資格。考慮到似乎需要迭代的整數數量龐大,這種行為似乎是違反直覺的。 range 物件是如何實現如此卓越的效率的?
Python 3 中的智慧序列:Range
與預期相反,Python 3 中的 range 物件並沒有預先產生其整個範圍的整數。相反,它充當智慧序列,在迭代期間按需計算數字。它僅儲存起點、停止點和步長,使其能夠根據需要計算單一值或子範圍。
最佳化的包含方法
range 物件也實作了高度最佳化的 contains 方法。此方法評估給定數字是否在範圍內,而無需掃描整個序列。相反,它執行涉及起點、停止點和步長的數學計算。此計算在最佳化的 C 程式碼中執行,導致時間複雜度接近恆定。
簡化範圍物件的範例實作
為了說明這個概念,請考慮一個簡化的我們自己的範圍物件的實作:
class my_range: # ... other methods as described in the question and answer ... def __contains__(self, num): if self.step < 0: if not (self.stop < num <= self.start): return False else: if not (self.start <= num < self.stop): return False return (num - self.start) % self.step == 0
這個例子示範了高效背後的基本原理包含範圍物件的方法。它計算範圍成員資格,而不需要迭代整個範圍。
總而言之,Python 3 中的範圍物件是一個精心設計的資料結構,它將按需計算與最佳化的 contains 方法結合。這種設計使其能夠以驚人的效率對大範圍內的大量人員進行收容檢查。
以上是Python 3 的「range()」如何實現如此快速的大數成員資格檢查?的詳細內容。更多資訊請關注PHP中文網其他相關文章!