當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python Functools lru_cache()用法及代碼示例


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




相關用法


注:本文由純淨天空篩選整理自sathvik chiramana大神的英文原創作品 Python Functools – lru_cache()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。