python2的比较函数,cmp

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了

原文地址:https://www.cnblogs.com/saolv/p/9486397.html