Discuss / Python / answer

answer

Topic source

viper1090

#1 Created at ... [Delete] [Delete and Lock User]

看了评论,大家对:

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

不是很理解: 其实我感觉是为了代码更安全更严谨吧,实际上如果只是实现FIFO,这些逻辑本身就是多余的。 直接用就可以了

if len(self) >= self._capacity:

mikehanyf

#2 Created at ... [Delete] [Delete and Lock User]

朋友你好。 这个代码是必要的, 你重复设置值的时候, 他会直接删掉原来的值, 然后新的放进去, 如果没有这个代码, 你的新值是设置不进去的。

廖雪峰不写多余的代码。。。

python 开发者群: 710660072 欢迎加入共同用python改变世界

哔咖丘

#3 Created at ... [Delete] [Delete and Lock User]

如果没有这段代码,但同时把<code>del self[key]</code>去掉,是可以重复设置的,不然就报错了。 这段代码的意义在于:超过容量设置属性需要把最新设置的属性删除,而重复设值是把已有的key值先删除(这个删除值不一定就是最先进入的值),所以需要区分。

乞丐200609

#4 Created at ... [Delete] [Delete and Lock User]

他们说的都是片面的,这段是这个思路,如果我包含这个键的时候我删除再加进来就可以了,没有必要判断长度来删除其他的键,而不包含且长度达到最大的时候是需要移除一个的,所以直接
if containsKey: del self[key] print('set:', (key, value)) else: if len(self) >= self._capacity: last = self.popitem(last=False) print('remove:', last) print('add:', (key, value))

就可以了


  • 1

Reply