Python中的functools模塊處理高階函數,即在(作為參數)上操作或返回函數以及其他此類可調用對象的函數。 functools模塊提供了多種方法,例如cached_property(func), cmp_to_key(func), lru_cache(func), wraps(func),
值得一提的是,這些方法將函數作為參數。
lru_cache()
lru_cache()
是functools模塊中的此類函數之一,它通過使用 memory 技術來幫助減少該函數的執行時間。
用法:
@lru_cache(maxsize=128, typed=False)
參數:
maxsize:此參數設置高速緩存的大小,高速緩存最多可存儲最大最近調用的函數,如果maxsize設置為None,則將禁用LRU函數,並且高速緩存可以不受限製地增長
typed:
如果將typed設置為True,則將分別緩存不同類型的函數參數。例如,將f(3)和f(3.0)視為具有不同結果的不同調用,並將它們存儲在緩存中的兩個單獨條目中
範例:1
from functools import lru_cache
import time
# Function that computes Fibonacci
# numbers without lru_cache
def fib_without_cache(n):
if n < 2:
return n
return fib_without_cache(n-1) + fib_without_cache(n-2)
# Execution start time
begin = time.time()
fib_without_cache(30)
# Execution end time
end = time.time()
print("Time taken to execute the\
function without lru_cache is", end-begin)
# Function that computes Fibonacci
# numbers with lru_cache
@lru_cache(maxsize = 128)
def fib_with_cache(n):
if n < 2:
return n
return fib_with_cache(n-1) + fib_with_cache(n-2)
begin = time.time()
fib_with_cache(30)
end = time.time()
print("Time taken to execute the \
function with lru_cache is", end-begin)
輸出:
Time taken to execute the function without lru_cache is 0.4448213577270508
Time taken to execute the function with lru_cache is 2.8371810913085938e-05
範例2:
from functools import lru_cache
@lru_cache(maxsize = 100)
def count_vowels(sentence):
sentence = sentence.casefold()
return sum(sentence.count(vowel) for vowel in 'aeiou')
print(count_vowels("Welcome to Geeksforgeeks"))
輸出:
9
相關用法
- Python functools.wraps()用法及代碼示例
- Python Functools update_wrapper()用法及代碼示例
- Python Functools total_ordering()用法及代碼示例
- Python Functools用法及代碼示例
- Python Functools cached_property()用法及代碼示例
注:本文由純淨天空篩選整理自sathvik chiramana大神的英文原創作品 Python Functools – lru_cache()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。