详解Python中的functools32lru_cache()函数功能与用法
functools.lru_cache()函数是Python标准库functools模块提供的一个装饰器函数,用于实现最近最少使用(Least Recently Used,LRU)缓存功能。该函数可以帮助我们在计算密集型的函数调用中,缓存一些计算结果,以提高函数的性能。
使用functools.lru_cache()函数时,需要使用该函数对需要被缓存的函数进行装饰。通过装饰后的函数,在每次调用时,会先检查缓存中是否有对应参数的计算结果,如果有则从缓存中取出并直接返回,如果没有则进行计算,并将计算结果存入缓存中。
functools.lru_cache()函数支持两个可选的参数的传递:
1. maxsize:设置缓存的最大容量,如果超过该容量,则最老的计算结果会被移除。默认值为128。
2. typed:如果设置为True,则对不同类型的参数会分别缓存结果。默认为False,即不区分参数类型。
下面通过一个具体的例子来详细说明functools.lru_cache()函数的用法和功能。
import functools
@functools.lru_cache(maxsize=3)
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(5))
在上述代码中,我们定义了一个用于计算斐波那契数列的函数fibonacci()。函数使用@functools.lru_cache()装饰器进行修饰,并设置了缓存的最大容量为3。
我们在主程序中调用了fibonacci(5)函数。由于该函数实现了递归的计算方式,对于较大的n,运行时间会非常长。但是在使用了@functools.lru_cache()装饰器后,fibonacci()函数会自动缓存计算过的结果,在后续的调用中可以直接使用缓存结果,从而大大提高了计算效率。
在上面的例子中,首次调用fibonacci(5)会进行一次计算,并将结果存入缓存中。后续再次调用fibonacci(5)时,会直接从缓存中取出结果并返回。同时,由于设置了缓存的最大容量为3,当再次调用fibonacci()函数,计算较大的n时,最老的缓存结果会被移除。
所以,使用functools.lru_cache()函数可以有效地优化计算密集型的函数调用,减少计算时间,提高程序性能。
