zoukankan      html  css  js  c++  java
  • python之实现缓存环

    看了CodeBokk 第二版通过python实现缓存环,吸收之后记录下,方便以后查阅。

    任务:

      定义一个固定尺寸的缓存,当它填满的时候,新加入的元素会覆盖第一个(最老的)元素。这种数据结构在存储日志和历史信息时非常有用。

    解决方案:

      当缓存填满时,及时地修改缓存对象,使其从为填满的缓存类变成填满的缓存类。

    实现代码如下:

      

     1 class RingClass:
     2     """
     3     定义一个未填满的缓存类   
     4     """
     5     def __init__(self, size_max):
     6         self.size = size_max
     7         self.data = []
     8     
     9     class __Full:
    10     “”“
    11     定义一个填满缓存时处理    
    12    ”“”    
    13         def append(self, x):
    14             self.data[self.cur] = x
    15             self.cur = (self.cur+1) % self.size 
    16                
    17         def tolist(self):
    18             return self.data[self.cur:]+self.data[:self.cur]
    19     
    20     def append(self, x):
    21         self.data.append(x)
    22         if len(self.data) == self.size:
    23             self.cur = 0
    24             self.__class__ = self.__Full  """永久性的将当前类切换填满的缓存类,关键部分"""
    25     def tolist(self):
    26         return self.data

    用法示例代码如下:

      

     1 if __name__ == "__main__":
     2     x = RingBuff(5)
     3     x.append(1);x.append(2);x.append(3);x.append(4)
     4     print x.__class__,x.tolist()
     5     x.append(5)
     6     print x.__class__,x.tolist()
     7     x.append(6)
     8     print x.__class__, x.data, x.tolist()
     9     x.append(7);x.append(8);x.append(9):x.append(10)
    10     print x.__class__, x.data,x.tolist()

    最后的结果示例如下:

    由于缓存环有固定大小,当填满的时候,加入新元素会覆盖到它持有的最旧的元素,。通过self.__class__ = self.__Full 完成这个转变。在实际应用中还是很有用处的。记录下,方便以后查阅!

  • 相关阅读:
    题解 CF934A 【A Compatible Pair】 ——贪心
    洛谷 P3381 【【模板】最小费用最大流】
    洛谷 P3376 【【模板】网络最大流】
    洛谷 P1027 【Car的旅行路线】
    TYVJ P1039 【忠诚2】
    洛谷 P1273 【有线电视网】
    斯特林数相关
    从 简单容斥 到 min-max 容斥 与 二项式反演
    POI2011 Lightning Conductor
    LOJ6089 小 Y 的背包计数问题
  • 原文地址:https://www.cnblogs.com/kirago/p/4769016.html
Copyright © 2011-2022 走看看