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 中新增。