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 完成这个转变。在实际应用中还是很有用处的。记录下,方便以后查阅!

转载于:https://www.cnblogs.com/Tony-zhangl/p/4769016.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值