美文网首页
实用装饰器 lru_cache

实用装饰器 lru_cache

作者: alue | 来源:发表于2022-10-17 22:21 被阅读0次

    python 的functools 提供了许多实用的工具,lru_cache是经常用到的一种。它的作用是缓存该函数调用的结果,下一次再调用此函数时,会先看之前是否有过缓存。在一些场景下,能够有效的提升程序性能。

    例如,下面是递归求解斐波那契数列的程序,对用缓存与不用缓存的两种方式进行了对比。

    
    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 thefunction without lru_cache is 19.193517684936523
    Time taken to execute the function with lru_cache is 0.0
    

    可以看出,对于这种递归调用,lru_cache能够显著降低运算时间。

    相关文章

      网友评论

          本文标题:实用装饰器 lru_cache

          本文链接:https://www.haomeiwen.com/subject/haadzrtx.html