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 cached_property()用法及代码示例
注:本文由纯净天空筛选整理自sathvik chiramana大神的英文原创作品 Python Functools – lru_cache()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。