为了账号安全,请及时绑定邮箱和手机立即绑定

匿名函数名为什么用cmp呢?

cmp=lambda s1,s2:cmp(s1.upper(),s2.upper())

我改成test=lambda s1,s2:cmp(s1.upper(),s2.upper()),报错了

TypeError: 'test' is an invalid keyword argument for this function

问题:为什么必须使用cmp作为函数名呢?

正在回答

4 回答

lambda函数将迭代对象元素转换为统一的大写或小写之后,cmp函数才进行比较排序。而自定义test不具备比较功能。

0 回复 有任何疑惑可以回复我~

个人理解,如果有误还请指正。

偏函数中的除了第一个参数外,其他剩下的参数其实就是第一个参数(其实是个函数)的可选参数(比如int2=functool.partial(int,base=2),后面的base参数其实是int()函数的一个可选参数),这样来看,我们就要先了解sorted函数了:

sorted函数有四个参数,sorted(iterable, cmp=None, key=None, reverse=False)

可以看到其中第一个参数是可迭代对象,后面的参数都是具有默认值的,重点阐述如下:

1、cmp,比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0

2、key,主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序

3、reverse,是否反转,默认情况下不反转

由此看来我们的偏函数后面就必须为cmp,key或者reverse这三个,否则就会报test不是这个函数的关键字的错误

sorted_ignore_case = functools.partial(sorted,cmp = lambda x,y: cmp(x.upper(),y.upper()))

2 回复 有任何疑惑可以回复我~

lambda是匿名函数的关键字,cmp是python自带的一个比较函数,而test是你自己定义的一个函数名,所以会报类型错误TypeError: 'test' is an invalid keyword argument for this function。因为test并不能进行比较操作运算。

1 回复 有任何疑惑可以回复我~

sorted方法是有三个参数,cmp就是其中的一个。cmp本身是一个比较函数。这儿之所以这么写是想重写比较的方式,所以写了一个lambda表达式重新定义cmp。

2 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255533    人
  • 解答问题       3038    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

匿名函数名为什么用cmp呢?

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号