在Python3.x的世界里,cmp函数没有了。那么sorted,min,max等需要比较函数作为参数的函数该如何用呢?

以min函数的定义为例,有两种重载形式:

单参数(一个迭代器):

复制代码 代码如下:

min(iterable[, key=func]) -> value

多参数(多个待比较内容):

复制代码 代码如下:

min(a, b, c, ...[, key=func]) -> value

本文主要讨论key=func参数的使用 。举例说明吧:

1.自定义对象的比较

我定义了一个类test,有两个成员变量a和b:

复制代码 代码如下:

class test:

def __init__(self,a,b):

self.a = a

self.b = b

然后实例化了三个对象x,y,z:

复制代码 代码如下:

x=test(10,'x')

y=test(2,'y')

z=test(8,'z')

我想让它们以变量a为标准做比较,求得a最小的对象:

复制代码 代码如下:

minTest=min(x,y,z,key=lambda t:t.a)

由于key这个参数需要传入一个函数,用lambda匿名函数很方便。本例中要实现比较函数(准确地说是比较关键字函数),故lamda的参数只要一个,随便你取什么名字(我用的是t),代表待比较的对象(即a,b,c);冒号后面是表达式,这里直接返回t的成员变量a。

于是乎,min函数(换成max,sorted等函数也是类似的)就会根据每个待比较对象的a值进行分别比较,返回a值最小的对象(的引用)赋值给minTest。

输出一下minTest.a,minTest.b就可以验证结果啦。

2.字典值value的比较

有一个字典:

复制代码 代码如下:

dic={'b':3,'a':5,'c':9,'d':2}

如果要根据字典的键key排序,只要:

复制代码 代码如下:

sorted(dic)

返回一个list,是排序后的键,但是值没有放入list:

复制代码 代码如下:

['a', 'b', 'c', 'd']

用以下方法就好了:

复制代码 代码如下:

>>> sorted(dic.items())

[('a', 5), ('b', 3), ('c', 9), ('d', 2)]

如果要根据值value排序呢?那么就传入比较函数这一参数就好啦:

复制代码 代码如下:

sorted(dic.items(),key=lambda d:d[1])

我继续用lambda匿名函数。其中d表示dic.items()里的每个迭代元素,即一个元组(例如('a', 5));表达式d[1]就是元组中的第二个元素(例如5),它也是字典的值value,我们需要以它为比较标准。运行结果:

复制代码 代码如下:

[('d', 2), ('b', 3), ('a', 5), ('c', 9)]

P.S.

博主今天闯关The Python Challenge遇到一关,需要统计文本中出现的字符个数并找出出现最少的字符。当然那一关其实不需要自己写比较函数,输出统计结果肉眼看得出。博主借助搜索引擎min函数的key=func参数时,深痛中文Python介绍文章都是旧世界Python2.x的天下,满是在新世界不能用的语法,给Python3.x的初学者带来很多误导,有害无益。故出此文。

博主也是Python初学者,如有大牛批评指正,深感荣幸。

python自定义函数的关键字_Python3.x中自定义比较函数相关推荐

  1. python自定义函数的关键字_python学习之--自定义函数:

    Python之--自定义函数: 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 以下自定义 ...

  2. python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value)

    python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value) 目 ...

  3. R语言自定义函数计算dataframe每列中的缺失值NA的个数、缺失值问题及其填充示例

    R语言自定义函数计算dataframe每列中的缺失值NA的个数.缺失值问题及其填充示例 目录

  4. c语言学习-自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数)

    c语言自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数) 程序流程图: 代码: #include<stdio.h> char strupr(char ch[ ...

  5. python def函数报错详解_python自定义函数def的应用详解

    这篇文章主要介绍了python自定义函数def的应用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 这里是三岁,来和大家唠唠 ...

  6. python定义函数的关键字是_python 函数定义

    python 函数 ---------------- ---------------- ---------------- ---------------- def test(x): print(x) ...

  7. MySQL自定义函数的使用及MySQL中的流程控制语句

    MySQL自定义函数 文章目录 MySQL自定义函数 创建自定义函数 自定义函数的调用 自定义函数的删除 自定义函数的维护 流程控制语句 条件控制语句 循环语句 创建自定义函数 创建自定义函数时, 开 ...

  8. 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法

    数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...

  9. java 自定义函数的调用_Java/Android中的函数调用回调函数自定义回调函数

    在做Android自定义控件时遇到要自定义回调函数的问题,想想自己还暂时没有那么精深的技术,赶紧返过头回来再重新研究Java中回调函数的问题.然而不幸的是,网上太多杂乱的帖子和博客都是转来转去,而且都 ...

最新文章

  1. Error creating bean with name 'defaultHandlerMapping' defined in ServletContext resource
  2. ios如何看idfv_iOS获取各种数据方法整理以及IDFA与IDFV使用环境
  3. junit单元测试报错InvalidTestClassError: Invalid test class
  4. layui循环数据并渲染_从简单到复杂三维图形渲染管线
  5. 2018-2019-2 《Java程序设计》第6周学习总结
  6. sqlserver存储过程加锁后怎么解锁_【缺陷周话】第59期:重复加锁
  7. sql truncate_SQL Truncate和SQL Delete语句的内部
  8. android 多图片优化工具,总结Android App内存优化之图片优化
  9. Unity Android 使用UnityWebRequest Post 数据后,没有获得服务器返回的数据
  10. 圣经闪卡 - Holy Bible Flash Cards
  11. 简单工厂模式-实现简易计算器
  12. 从0到1:如何创建YouTube频道(手把手设置指南)
  13. 使照片带有妙的电影色彩55款工具套件的lr微妙的电影调色预设
  14. 最全的“四大天王”合影集(绝对经典…
  15. 【LWP,进程,线程】Linux
  16. 华为linux默认密码,登录存储系统CLI管理界面(用户名+密码)
  17. 全面掌握前端框架Vue.js
  18. Qt 字符编码转换(UTF-8 转换为 GBK) \u7528\u6237\u672a\u7b7e\u7ea6
  19. Android Studio nativeLibraryDirectories=[/data/app/com.lukouapp-1/lib/arm64, /vendor/lib64, /syste
  20. GPC凝胶色谱理论和应用(二)

热门文章

  1. PHP学习总结(4)——PHP入门篇之PHP计算表达式
  2. ActiveMQ学习总结(7)——ActiveMQ使用场景
  3. ajax提示弹出dev,windows git pull或者push代码时弹出安全框解决办法
  4. 虚拟服务器英文版设置,apache配置(linux及windows中的设置)以及虚拟主机的设置(国外英语资料).doc...
  5. 一个对前端模板技术的全面总结
  6. 【洛谷】P1111 修复公路
  7. 受Struts2漏洞影响 思科正审查其主要产品安全性 CVE-2017-9805已有主动攻击
  8. C#编写简易的学生成绩查询
  9. CentOS 6.4用源代码安装LNMP环境
  10. WebRequestDataBinder实现将请求参数映射为POJO对象