如何使用装饰器来缓存函数执行的结果?

如何使用装饰器来缓存函数执行的结果?

装饰器示例:

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

使用装饰器的步骤:

  1. 创建一个装饰器函数 cache.
  2. 使用 @wraps 装饰 func装饰器。
  3. wrapper 函数中,使用 cache 中的键来检查是否需要缓存结果。
  4. 如果缓存中没有结果,则调用 func 并将其结果缓存到 cache 中。
  5. 返回缓存结果。

示例:

@cache
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(10))  # 输出 55

优点:

  • 减少函数执行的次数。
  • 提高性能。
  • 减少网络请求。

注意:

  • 装饰器只缓存函数执行的结果,不会缓存函数调用本身。
  • 缓存的键必须是函数执行结果的字符串表示。
  • 缓存的有效性取决于你的应用程序中函数执行的频率。
相似内容
更多>