首页 > IT技术 > python > 正文

Python3.x自定义比较函数
2014-06-25 11:28:29   来源:   评论:0 点击:

在Python3.x的世界里,cmp函数没有了。那么sorted,min,max等需要比较函数作为参数的函数该如何用呢?以min函数的定义为例,有两种重载形式...
 
在Python3.x的世界里,cmp函数没有了。那么sorted,min,max等需要比较函数作为参数的函数该如何用呢?
 
以min函数的定义为例,有两种重载形式:
 
单参数(一个迭代器):
 
[python] view plaincopy
min(iterable[, key=func]) -> value  
多参数(多个待比较内容):
 
[python] view plaincopy
min(a, b, c, ...[, key=func]) -> value  
本文主要讨论key=func参数的使用 。举例说明吧:
 
 
1.自定义对象的比较
我定义了一个类test,有两个成员变量a和b:
[python] view plaincopy
class test:  
         def __init__(self,a,b):  
              self.a = a  
              self.b = b  
然后实例化了三个对象x,y,z:
[python] view plaincopy
x=test(10,'x')  
y=test(2,'y')  
z=test(8,'z')  
我想让它们以变量a为标准做比较,求得a最小的对象:
[python] view plaincopy
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的比较
有一个字典:
[python] view plaincopy
dic={'b':3,'a':5,'c':9,'d':2}  
如果要根据字典的键key排序,只要:
[python] vie

相关热词搜索:函数,lambda,cmp 比较

上一篇:WebDriver 常用获取测试对象的状态
下一篇:webdriver悬停问题

分享到: 收藏
评论排行