匿名函数名为什么用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作为函数名呢?
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作为函数名呢?
2017-07-12
个人理解,如果有误还请指正。
偏函数中的除了第一个参数外,其他剩下的参数其实就是第一个参数(其实是个函数)的可选参数(比如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()))
举报