zoukankan      html  css  js  c++  java
  • lru_cache总结

    什么是缓存机制

      缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。

    为什么要用缓存机制

      目的就是为了降低数据源访问的频次,提高运行性能,例如在制作斐波那契数列这道算法题,有很多重复的数据,在使用适当的缓存机制,可以直接从缓存当中取,可以加快运行效率,拜托超时的烦恼。

    如何运用lru_cache

      在 Python的3.2版本中,引入了一个非常优雅的缓存机器,即 functool 模块中的 lru_cache 装饰器。如果要在 python2 中使用 lru_cahce 需要安装 functools32。使用方式如下:

    import functools
    
    @functools.lru_cache
    def fun(MaxSize):
    	pass
    

    简单测试

    这里用一个简单的示例演示 lru_cache 效果:

    import functools
    @functools.lru_cache(None)
    def add(x, y):
        print("经过函数计算:%s + %s" % (x, y))
        return x + y
        
    print(add(2,2))
    print(add(2,2))
    print(add(2,3))
    

    输出结果:

    经过函数计算:2 + 2
    4
    4
    经过函数计算:2 + 3
    5
    

    举例

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

    每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

    注意:给定 n 是一个正整数。

    示例 1:

    输入: 2
    输出: 2
    解释: 有两种方法可以爬到楼顶。
    1.  1 阶 + 1 阶
    2.  2 阶
    

    示例 2:

    输入: 3
    输出: 3
    解释: 有三种方法可以爬到楼顶。
    1.  1 阶 + 1 阶 + 1 阶
    2.  1 阶 + 2 阶
    3.  2 阶 + 1 阶
    

    代码如下:

    import functools
    class Solution:
        @functools.lru_cache(100)
        def climbStairs(self, n: int) -> int:
            if n == 1: return 1
            if n == 2: return 2
            return self.climbStairs(n-1) + self.climbStairs(n-2)
    
  • 相关阅读:
    Winform跨线程操作界面的策略
    Winform DataGridView扩展
    GDI+的常用类
    函数中参数的验证顺序
    C# Winform常见的Editor及其它经验
    能够引起异常的运算符和关键字
    终结程序
    C#异常处理策略
    python3.6入门到高阶(全栈) day01 python 基础
    虚拟机中系统盘扩容
  • 原文地址:https://www.cnblogs.com/Lance-WJ/p/13562010.html
Copyright © 2011-2022 走看看