1. #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    from functools import cmp_to_key
  2.  
  3. a = [1, 6, 4, 5]
    a.sort(key=cmp_to_key(lambda x, y: x - y))
    # cmp_to_key(lambda x,y:x-y)是一个k类
    # 当x=4,y=3的时候,k类被实例化,mycamp是lambda x,y:x-y return x-y
    # 首先当进行sort比较的时候,列表里面的元素被实例化传进去
    # self.obj = 4 other.obj = 3
    # sort函数默认是从小到大排列,在比较的过程中,由于4比3大,自动触发__gt__这个函数,
    # mycmp的返回值是4 -3 = 1,再和0做比较,1 > 0,所以cmp_to_key(mycmp)的返回值为True
    # 所以正序排列
    # 如果mycamp是lambda x,y:x-y return y-x
    # self.obj = 4 other.obj = 3
    # sort函数默认是从小到大排列,在比较的过程中,由于4比3大,自动触发__gt__这个函数,
    # mycmp的返回值是3 - 4 = -1,再和0做比较,-1 < 0,所以cmp_to_key(mycmp)的返回值为False
    # 所以反序排列
    def cmp_to_key(mycmp):
    """Convert a cmp= function into a key= function"""
    class K(object):
    __slots__ = ['obj']
    def __init__(self, obj, *args):
    self.obj = obj
    def __gt__(self, other):
    return mycmp(self.obj, other.obj) > 0
    def __gt__(self, y): # real signature unknown; restored from __doc__
    """ x.__gt__(y) <==> x>y """
    pass
    return K

functiontools模块的更多相关文章

  1. python functiontools 模块

    一个内置的模块.  作用是实现了更多的功能, 同时形式上显得很简洁.    虽然在使用很方便, 但其中的原理还是很难复杂的. ------------------------------------- ...

  2. python functiontools模块中的 wraps

    直接上代码看效果: # 定义一个最简单的装饰器 def user_login_data(f): def wrapper(*args, **kwargs): return f(*args, **kwar ...

  3. python--内置常用模块(一) collections 队列 time模块 functiontools

    一. 模块的简单认识 模块就是我们把装有特定功能的代码进行归类的结果.从代码编写的单位来看我们的程序,从小到大的顺序:一条代码 < 语句块 < 代码块(函数,类) < 模块,我们目前 ...

  4. npm 私有模块的管理使用

    你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...

  5. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  6. ES6模块import细节

    写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...

  7. Python标准模块--ContextManager

    1 模块简介 在数年前,Python 2.5 加入了一个非常特殊的关键字,就是with.with语句允许开发者创建上下文管理器.什么是上下文管理器?上下文管理器就是允许你可以自动地开始和结束一些事情. ...

  8. Python标准模块--Unicode

    1 模块简介 Python 3中最大的变化之一就是删除了Unicode类型.在Python 2中,有str类型和unicode类型,例如, Python 2.7.6 (default, Oct 26 ...

  9. Python标准模块--Iterators和Generators

    1 模块简介 当你开始使用Python编程时,你或许已经使用了iterators(迭代器)和generators(生成器),你当时可能并没有意识到.在本篇博文中,我们将会学习迭代器和生成器是什么.当然 ...

随机推荐

  1. Linux目录结构以及文件操作

    Linux目录结构 UNIX 是以目录为主的,Linux 也继承了这一优良特性. Linux 是以树形目录结构的形式来构建整个系统的,可以理解为树形目录是一个用户可操作系统的骨架.虽然本质上无论是目录 ...

  2. git与eclipse集成之更新特性分支代码到个人特性分支

    1.1. 更新特性分支代码到个人特性分支 在基于特性分支开发的过程中,存在多人向特性分支提交代码的情况,开发者需要关注特性分支代码与个人分支代码保持同步,否则可能导致提交代码冲突. 具体代码同步步骤: ...

  3. 利用 git format-patch 和 git send-email 把修改的 patch 文件发送给 ffmpeg-devel

    1. 下载源码git clone https://git.ffmpeg.org/ffmpeg.git 2. 设置 git 用户的邮箱和姓名git config --global user.email ...

  4. linux下.bashrc文件 /PATH环境变量修改 /提示符修改

    1) .bashrc文件 在linux系统普通用户目录(cd /home/xxx)或root用户目录(cd /root)下,用指令ls -al可以看到4个隐藏文件, .bash_history   记 ...

  5. javascript日期格式yyyyMMddHHmmss

    1. function GetDateTimeToString() { var date_ = new Date(); var year = date_.getFullYear(); ; var da ...

  6. Android ADT 离线下载

    网上很多的Android在IDE eclipse的开发环境教程,ADT的就安装肯定也在里面啦 ADT的安装都是一个在线安装地址: https://dl-ssl.google.com/android/e ...

  7. HBase基础架构及原理

    1. HBase框架简单介绍 HBase是一个分布式的.面向列的开源数据库,它不同于一般的关系数据库,是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式.HBas ...

  8. Golang服务器热重启、热升级、热更新(safe and graceful hot-restart/reload http server)详解

    服务端代码经常需要升级,对于线上系统的升级常用的做法是,通过前端的负载均衡(如nginx)来保证升级时至少有一个服务可用,依次(灰度)升级. 而另一种更方便的方法是在应用上做热重启,直接更新源码.配置 ...

  9. Elasticsearch入门,这一篇就够了

    实时搜索引擎Elasticsearch Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进 ...

  10. python按照字典排序

    d = {'a':1,'b':4,'c':2} 方法一: sorted(d.items(),key = lambda x:x[1],reverse = True) 方法二: import operat ...