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

任务:

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

解决方案:

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

实现代码如下:

  

 class RingClass:
"""
定义一个未填满的缓存类
"""
def __init__(self, size_max):
self.size = size_max
self.data = [] class __Full:
“”“
定义一个填满缓存时处理
”“”
def append(self, x):
self.data[self.cur] = x
self.cur = (self.cur+1) % self.size def tolist(self):
return self.data[self.cur:]+self.data[:self.cur] def append(self, x):
self.data.append(x)
if len(self.data) == self.size:
self.cur = 0
self.__class__ = self.__Full """永久性的将当前类切换填满的缓存类,关键部分"""
def tolist(self):
return self.data

用法示例代码如下:

  

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

最后的结果示例如下:

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

最新文章

  1. Redola.Rpc 的一个小目标
  2. hander消息机制原理
  3. Spring boot 打成jar包问题总结
  4. 转:在浏览器地址栏按回车、F5、Ctrl+F5刷新网页的区别
  5. Core Data数据操作
  6. Python学习教程(learning Python)--3.3.1 Python下的布尔表达式
  7. 深入理解Java虚拟机
  8. IOS 多线程 NSOperation GCD
  9. linux 创建连接命令 ln -s 软连接
  10. Linux学习之linux目录
  11. 卷积神经网络中的channel 和filter
  12. 实现加载Tomcat服务器中的图片,并且有进度条提示进度
  13. 实现多个标签页之间通信的几种方法(sharedworker)
  14. MSSQL—行转列
  15. IntelliJ IDEA安装bower
  16. Forth词典条目结构
  17. 安装Python 3.6 在Ubuntu 16.04 LTS 版本
  18. 搭建RESTful API来使用Fabric Node SDK 开篇
  19. TOP100summit 2017:微博如何做到1小时增加一千台服务器应对鹿晗恋情带来的流量暴增
  20. POJ 1046

热门文章

  1. 动手Jquery插件
  2. noip推荐系列:汽艇[贪心]
  3. vector如何进行局部排序
  4. 使用Entity Framework 4进行代码优先开发
  5. GNU 项目(开源社区的由来,背后的哲学)
  6. Linux环境进程间通信(二):信号(下)
  7. 1047找环环&1503整数探究
  8. Oracle随机获取记录
  9. asp.net mvc Route 使用自定义条件(constraints)禁止某ip登陆
  10. MySQL能够承受上亿万条的数据量的架构