Python 的 Heapq 可以用来做快速排序使用, 例如我想做一个根据优先级决定处理顺序的功能, 初始化了一个 list:
l = [
(23, socket.socket()),
(25, socket.socket()),
(30, socket.socket()),
(26, socket.socket()),
(13, socket.socket()),
]
那么当我在heapq.heappush 或者 pop 的时候就会出现问题, 原因是这个 socket 类型之间是不能被比较的:
socket.socket() > socket.socket()
TypeError: '>' not supported between instances of 'socket' and 'socket'
解决方法:
既然socket类型不能被比较, 那么我们找个可以被比较的类型不就好了吗
于是我首当其冲想到了:
在 int 里保存数据, 这样比较的时候只会比较 int 的大小
class myint(int):
def __new__(cls, n, data):
cls.data = data
return super(myint, cls).__new__(cls, n)
n = myint(1, socket.socket())
n2 = myint(2, socket.socket())
n
-> 1
n2
-> 2
n2 > n
True
这样两个数据就可以被比较了, 放到heapq里也不会报错, 调用数据的时候就用 n.data 即可