python lru_cache详解
时间: 2023-11-17 10:04:20 浏览: 144
`lru_cache`是Python标准库中的一个函数装饰器,用于实现一个最近最少使用(LRU)缓存机制。它可以缓存函数的输入和输出,以便在多次调用函数时可以更快地返回结果。
使用`lru_cache`非常简单,只需要将其作为装饰器注解到需要缓存的函数上即可。例如:
```python
from functools import lru_cache
@lru_cache(maxsize=128)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
```
这个示例展示了如何使用`lru_cache`来缓存斐波那契数列的计算结果。`maxsize`参数指定了缓存的大小,当缓存中的元素数量达到这个值时,最近最少使用的元素将被删除。
`lru_cache`还有一些其他的可选参数,例如`typed`和`cache_info`。`typed`参数指定是否对不同类型的参数进行不同的缓存,而`cache_info`则返回一个命名元组,其中包含缓存的状态信息,例如缓存命中次数和未命中次数。
总的来说,`lru_cache`是一个非常有用的函数装饰器,可以帮助我们实现一个高效的缓存机制,提高程序的运行效率。
相关问题
python装饰器详解
装饰器是 Python 中非常有用的语法,它允许我们在不改变函数源代码的情况下,对函数的功能进行扩展。装饰器本质上是一个函数,它可以接受一个函数作为参数,并返回一个新的函数。
装饰器的基本语法如下:
```python
@decorator_function
def some_function():
# do something
```
其中,`decorator_function` 是装饰器函数,`some_function` 是需要被装饰的函数。
装饰器函数可以用来扩展被装饰函数的功能,比如增加日志、计时等。下面是一个简单的装饰器函数:
```python
def my_decorator(func):
def wrapper():
print("Before the function is called.")
func()
print("After the function is called.")
return wrapper
```
这个装饰器函数接受一个函数作为参数,并返回一个新的函数。新的函数 `wrapper` 在被调用时会先打印一句话,然后调用原函数 `func`,最后再打印一句话。
我们可以使用这个装饰器函数来装饰一个函数,比如:
```python
@my_decorator
def say_hello():
print("Hello!")
```
当我们调用 `say_hello` 函数时,会依次打印出 "Before the function is called."、"Hello!" 和 "After the function is called."。
除了类似于上面的装饰器函数,还有一种更加常用的装饰器语法,它使用了 Python 的语法糖。下面是一个例子:
```python
def my_decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
print("Before the function is called.")
result = func(*args, **kwargs)
print("After the function is called.")
return result
return wrapper
```
这个装饰器函数和上面的例子非常相似,唯一的区别是使用了 `@functools.wraps(func)` 语法糖。这个语法糖会自动将新函数的名称和文档字符串设置为原函数的名称和文档字符串,这样可以避免一些问题。
除了上面的例子,还有很多其他有用的装饰器,比如用来缓存函数结果的 `@lru_cache`,用来检查函数参数类型的 `@type_check`,用来限制函数调用频率的 `@rate_limit` 等。这些装饰器都可以帮助我们更加方便地编写 Python 代码。
阅读全文