天天看點

python——@functools.lru_cache修飾符簡單使用

        使用functools.lru_cache修飾符的函數,簡單的了解為儲存多次執行結果,當傳入某一參數的執行結果已經執行過,則不會再一次執行而是直接傳回結果。

functools.lru_cache(maxsize=128, typed=False)接受兩個參數:

        maxsize:預設為128,表示儲存使用functools.lru_cache修飾符的函數最近執行結果的次數,會根據size大小逐漸覆寫前期執行結果,被覆寫結果需要再次執行函數。

        typed:預設為False,表示不同資料類型儲存在一起,True,表示不同資料類型分開儲存

【sample】

In [1]: import functools
In [2]: @functools.lru_cache(3) # 傳入3,表示隻儲存最近執行的3次結果
        def test_func(a, b):
            print("test_func: a=%d, b=%d" %(a, b))
            return a+b
# 此時緩存中記錄為空
In [3]: res = test_func(1,2)	In [4]: res
Out[3]: test_func: a=1, b=2		Out[4]: 3
# 此時緩存儲存傳入參數 (1,2)執行結果

In [5]: res = test_func(3,4)	In [6]: res 
Out[5]: test_func: a=3, b=4		Out[6]: 7
# 此時緩存儲存傳入參數(1,2)、(3,4)執行結果

In [7]: res = test_func(5,6)	In [8]: res
Out[7]: test_func: a=5, b=6		Out[8]: 11
# 此時緩存儲存傳入參數(1,2)、(3,4)、(5,6)執行結果


In [9]: res = test_func(1,2)
In[10]: res
Out[10]:3	# 最近3次的執行結果包含傳入參數為1和2的情況,是以直接從緩存讀取,不會再次執行,直接傳回2
# 此時緩存儲存傳入參數(3,4)、(5,6)、(1,2)執行結果

In [11]: res = test_fun(7, 8)	In [12]: res
Out[11]: test_func: a=7, b=8	Out[12]: 15
# 此時緩存儲存傳入參數(5,6)、(1,2)、(7,8)執行結果

# 最近3次的執行結果不包含傳入參數為3和4的情況,是以需要再次執行函數
In [13] res = test_func(3,4)	In [14]: res
Out[13]: test_func: a=3, b=4	Out[14]: 7
# 此時緩存儲存傳入參數(1,2)、(7,8)、(3,4)執行結果