当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。