让你的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缓存技术。
上一篇:python偏函数


下一篇:Django filter()