• 让你的Python健步如飞的小技巧


    • 缓存是一项从底层到高层都会广泛应用的技术,无论是前端还是后端。缓存是可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速率很快。
    • 在python开发过程中,有一些函数的结果可能会被反复调用,如果这个函数耗时过大,那么我们如何通过缓存来提升他的开发效率呢?

    LRU缓存

    • 本文就来介绍一下LRU缓存到底是个什么鬼。

    • 不同的编程语言,会有不同的缓存策略。例如,通过哈希映射优先级队列等实现缓存。因此,不同的编程语言,在缓存的解决方案面有很大的差异。

    • 但是,在Python中,标准工具包functools实现了一种名为LRU(Least Recently Used)的缓存策略,可以通过传入参数,来设定缓存最近多少次的计算结果,如果传入参数设为None,那么会进行无限缓存。

    Talk is Cheap, Show me the Code

    • 同学们,下面我们就举一个斐波那契数列的例子,看看LRU在递归问题上面的表现
    # 先来一个不用LRU的例子
    
    import time 
    import functools
    
    
    def fib(n):
      if n <= 1:
        return n 
      return fib(n - 1) + fib(n - 2)
    
    t1 = time.time()
    fib(30)
    print(f"time take {time.time() - t1}s")
    # time take 0.3282461166381836s
    
    # 使用LRU
    
    import time 
    import functools
    
    @functools.lru_cache(maxsize=5)
    def fib(n):
      if n <= 1:
        return n
      return fib(n - 1) + fib(n - 2)
    
    t2 = time.time()
    fib(30)
    print(f"time take {time.time() - t2}s")
    # time take 1.7881393432617188e-05s
    
    • 来,同学们,见证奇迹的时刻到了。根据两个耗时对比,利用缓存的计算速度高了不止一个量级。

    总结

    • 在日常工作中,如果需要有对程序进行相应的优化,那么考虑一下LRU缓存,经济又实惠。
    • 计算密集型的程序,条件允许的话,尽量使用LRU缓存技术。
  • 相关阅读:
    《PHP, MySQL, Javascript和CSS》读书随手记----php篇
    20160917 携程前端笔试题
    总结一下http请求吧
    前端资源池
    【CS】笔试常见题目
    【JavaScript】js 中一些需要注意的问题
    c++中的一些计算的问题
    ubuntu下sqlite命令
    关于ubuntu软件卸载的问题
    【js】关于正则表达式
  • 原文地址:https://www.cnblogs.com/zcg921001/p/13338606.html
Copyright © 2020-2023  润新知