lru 快取
可以使用 @lru_cache 裝飾器使用最近最少使用的快取來包裝昂貴的,計算密集型的功能。這允許對函式呼叫進行記憶,以便具有相同引數的未來呼叫可以立即返回,而不必重新計算。
@lru_cache(maxsize=None) # Boundless cache
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
>>> fibonacci(15)
在上面的示例中,fibonacci(3) 的值僅計算一次,而如果 fibonacci 沒有 LRU 快取,則 fibonacci(3) 將被計算超過 230 次。因此,@lru_cache 特別適用於遞迴函式或動態程式設計,其中可以使用相同的精確引數多次呼叫昂貴的函式。
@lru_cache 有兩個論點
maxsize:儲存的呼叫數。當唯一呼叫的數量超過maxsize時,LRU 快取將刪除最近最少使用的呼叫。typed(在 3.3 中新增):用於確定不同型別的等效引數是否屬於不同快取記錄的標誌(即,如果3.0和3計為不同的引數)
我們也可以看到快取統計資訊:
>>> fib.cache_info()
CacheInfo(hits=13, misses=16, maxsize=None, currsize=16)
注意 :由於 @lru_cache 使用字典來快取結果,因此該函式的所有引數都必須是可清除的,以使快取起作用。
官方 Python 文件為 @lru_cache 。@lru_cache 在 3.2 中新增。