Python裝飾器之lru cache

2021-09-13 01:51:30 字數 674 閱讀 9275

在流暢的python裡看到的,做一下筆記。

在執行一些比較耗時的函式,如遞迴時重複計算相同引數的函式時。通過python自帶的裝飾器functools.lru_cache可以將函式結果儲存起來,作為快取在重複計算時直接返回結果。減少函式執行的時間。

以斐波那契數列的遞迴為例,首先實現乙個遞迴的斐波那契方法:

def fib(n):

if n < 2:

return n

return fib(n-1) + fib(n-2)

遞迴的時間複雜度為o(2^n),當傳入的引數較大時,執行時間會顯著增加。

而我們只需要給這個函式加上乙個裝飾器,一切都變得快了起來。

@functools.lru_cache()

def fib(n):

if n < 2:

return n

return fib(n-1) + fib(n-2)

以傳入引數30為例,當不使用裝飾器時,執行時間為24秒

加上裝飾器後

此外,裝飾器支援2個引數,maxsize表示儲存多少個結果,typed表示是否將結果根據型別分開儲存。

而lru_cache通過字典儲存結果,鍵值根據傳入的引數建立,所以裝飾的方法傳入的引數必須都是可雜湊的。

python裝飾器介紹 Python之裝飾器簡介

python函式式程式設計之裝飾器 1.開放封閉原則 簡單來說,就是對擴充套件開放,對修改封閉。在物件導向的程式設計方式中,經常會定義各種函式。乙個函式的使用分為定義階段和使用階段,乙個函式定義完成以後,可能會在很多位置被呼叫。這意味著如果函式的定義階段 被修改,受到影響的地方就會有很多,此時很容易...

python 找到裝飾器 Python之裝飾器

裝飾器本質上就是乙個python函式,他可以讓其他函式在不需要做任何 變動的前提下,增加額外的功能,裝飾器的返回值也是乙個函式物件。裝飾器的作用 在不改變原函式及原函式的執行的情況下,為原函式增加一些額外的功能,比如列印日誌 執行時間,登入認證等等。乙個簡單的裝飾器 import time def ...

Python之裝飾器

裝飾器就是乙個以函式作為引數並返回乙個替換函式的可執行函式 即裝飾器是乙個函式,其引數為函式,返回值也為函式 可理解為對函式的功能進行拓展,所以叫裝飾 outer為裝飾器,效果為給被裝飾函式返回值結果加負號 defouter fun definner x return fun x return in...