class Shu(object): def __init__(self,ss): self.ss = ss def __str__(self): return '(%s: %s)' % (self.name, self.score) __repr__ = __str__ def __cmp__(self, s): print ('func __cmp__ work') if self.ss < s.ss: return -1 elif self.ss > s.ss: return 1 else: return 0 a=Shu(3) b=Shu(2) c=a>b#运行a.__cmp__(b),c为True d=cmp(a,b)#运行a.__cmp__(b),d为1,注意d与上面c类型不同,cmp返回的是0,-1,1
python2的比较函数是cmp.cmp调用的是对象的__cmp__方法,字符串,整数,列表等对象都内置该方法。
而给列表排序的函数sorted,也是通过cmp函数确定两个元素的大小关系,然后再利用插入排序的改进版的(与插入排序原理相同,不同的是,插入排序插入时是从已排序部分的最后一个元素进行比较,而这个是从中间进行比较)算法完成排序,返回排好序的一个新的列表。但注意,他并不改变原列表
但是在pyhon3的比较函数已经不是cmp了