如何使用装饰器来缓存函数执行的结果?
装饰器示例:
def cache(func):
cache = {}
@wraps(func)
def wrapper(*args, **kwargs):
key = str(args) + str(kwargs)
if key not in cache:
cache[key] = func(*args, **kwargs)
return cache[key]
return wrapper
使用装饰器的步骤:
- 创建一个装饰器函数
cache
. - 使用
@wraps
装饰func
装饰器。 - 在
wrapper
函数中,使用cache
中的键来检查是否需要缓存结果。 - 如果缓存中没有结果,则调用
func
并将其结果缓存到cache
中。 - 返回缓存结果。
示例:
@cache
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10)) # 输出 55
优点:
- 减少函数执行的次数。
- 提高性能。
- 减少网络请求。
注意:
- 装饰器只缓存函数执行的结果,不会缓存函数调用本身。
- 缓存的键必须是函数执行结果的字符串表示。
- 缓存的有效性取决于你的应用程序中函数执行的频率。