python之實現緩存環

看了CodeBokk 第二版經過python實現緩存環,吸取以後記錄下,方便之後查閱。python

任務:緩存

  定義一個固定尺寸的緩存,當它填滿的時候,新加入的元素會覆蓋第一個(最老的)元素。這種數據結構在存儲日誌和歷史信息時很是有用。數據結構

解決方案:app

  當緩存填滿時,及時地修改緩存對象,使其從爲填滿的緩存類變成填滿的緩存類。spa

實現代碼以下:日誌

  

 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

用法示例代碼以下:code

  

 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 完成這個轉變。在實際應用中仍是頗有用處的。記錄下,方便之後查閱!blog

相關文章
相關標籤/搜索