Discuss / Python / FIFO的理解和重写

FIFO的理解和重写

Topic source

对于示例中的FIFO的理解:

  1. 如果字典中存在key时更新值,则移动到末尾。
  2. 如果字典中元素长度大于边界,则移除字典头元素。

OrderedDict如果key相同的时候更新值,不会影响原来的顺序。

故简化改版了FIFO的写法:

from collections import OrderedDict

class Fifo(OrderedDict):
    def __init__(self, length=10):
        super().__init__(self)
        self.__length = length

    def __setitem__(self, key, value):
        if key in self:
            del self[key] # 相同key时,值更新,是否移动末尾
        else:
            if len(self) + 1 > self.__length:
                self.popitem(last=False) # 移除头元素
        return super().__setitem__(key, value

如有理解不全或偏差的,请指正。

没看出来哪里简化了啊。。。

去掉跟踪打印后的逻辑层

if len(self) - containsKey >= self._capacity:

            last = self.popitem(last=False)     

if containsKey:

            del self[key]


  • 1

Reply