zoukankan      html  css  js  c++  java
  • python中 __cmp__

    对 intstr 等内置数据类型排序时,Python的 sorted() 按照默认的比较函数 cmp 排序,但是,如果对一组 Student 类的实例排序时,就必须提供我们自己的特殊方法 __cmp__():

    class Student(object):
    
        def __init__(self, name, score):
            self.name = name
            self.score = score
    
        def __str__(self):
            return '(%s: %s)' % (self.name, self.score)
    
        __repr__ = __str__
    
        def __cmp__(self, s):
            if self.score>s.score: 
                
                return -1
            elif self.score<s.score :
                
                return 1
            else:
                return cmp(self.name,s.name)
    
    L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 99)]
    print sorted(L)

    输出:

    [(Alice: 99), (Tim: 99), (Bob: 88)]

    上述 Student 类实现了__cmp__()方法,__cmp__用实例自身self和传入的实例 进行比较,如果 self 应该排在前面,就返回 -1,如果 s 应该排在前面,就返回1,如果两者相当,返回 0。并且还同时实现了name的排序。



    上述方法可以简写:
    class Student(object):
    
        def __init__(self, name, score):
            self.name = name
            self.score = score
    
        def __str__(self):
            return '(%s: %s)' % (self.name, self.score)
    
        __repr__ = __str__
    
        def __cmp__(self, s):
           if self.score == s.score:
                return cmp(self.name, s.name)
            return -cmp(self.score, s.score)
    
    L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 99)]
    print sorted(L)


  • 相关阅读:
    java类实现 指定网站信息采集
    通过jxl.jar 读取、导出excel的小例子
    SQL使用CASE WHEN THEN
    动态查询的实现
    Oracle 查询存储过程 做横向报表
    文本信息 生成二维码 例子
    将对象转换为指定的Map
    eclipse 插件大全
    让人看了舒服的清爽颜色搭配CSS
    spring 定时任务 实现
  • 原文地址:https://www.cnblogs.com/WhatTTEver/p/6928325.html
Copyright © 2011-2022 走看看