使用Python编写一个缓存类

最近使用面试Python遇到一个问题:

编写一个缓存类,LRUCache,需要满足下列要求:

1、数据存储以key-value形式,

2、可以自定义缓存大小,

3、类里面有get方法,get方法根据key获取value,不存在时返回None

4、类里面有put方法,有两个参数key,value,判断key是否存在,存在,覆盖key的value值,不存在时添加,添加时判断是否大于缓存返回,大于时删除长时间未访问的数据,再进行添加

# @Description : LRU缓存类,可以自定义缓存大小,
from collections import OrderedDict


class LRUCache(OrderedDict):
    def __int__(self, capacity: int):
        super().__init__()
        self.capacity = capacity

    def get(self, key: int):
        if key not in self:
            return None
        # 被访问就移动到最后
        self.move_to_end(key)
        return self[key]

    def put(self, key: int, value: int):
        if key in self:
            self.move_to_end(key)
        self[key] = value
        if len(self) > self.capacity:
            # 当大于最大的缓存范围时,将第一个进行弹出
            self.popitem(last=False)

OrderedDict:有序字典

OrderedDict中的popitem(last=False)是移除第一个元素,当放存在的key是使用move_to_end(key)将最近访问的key移动到最后,这样不经常访问的就自然到前面取了,

dict:是无序的,存储时是根据hash进行排序的,所以不是有序的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值