python中定义函数参数的规则_python里方法sort()中cmp参数的用法

实际上sort()方法在不传入参数func的时候 默认cmp为None。

调用的是lambda x,y: cmp(x, y),而实际上就是调用cmp函数。即:

numbers = [5,2,9,7]

numbers.sort()

#sort()函数判断cmp为None,则调用`lambda x,y: cmp(x, y)`

numbers.sort(cmp=None) #等效于numbers.sort()

numbers.sort(cmp=cmp)

#sort()判断cmp存在,并且不为None,则通过调用`cmp(x,y)`来排序

#虽然结果是相同的,可实际执行流程是不同的(这里我不确定sort()内部是用匿名函数还是直接用cmp来实现的,不过应该没有多大区别。)

numbers.sort(cmp)

#sort()通过*args来寻找是否存在没有指定变量的传入参数。

#函数判断其是否callalbe,如果是则赋值给cmp

#函数执行`cmp(x,y)`来排序

numbers.sort(custom_sort_method)

#sort()通过*args来寻找是否存在没有指定变量的传入参数。

#函数判断其是否callalbe,即是否是函数,如果是则赋值给cmp = custom_sort_method

# 函数调用`cmp(x,y)`来排序,但此时的cmp实际上已经是custom_sort_method方法了

numbers.sort(cmp = custom_sort_method)

# 此时函数直接发现cmp不为None,则直接执行cmp函数来排序,而此时cmp也已经是custom_sort_method方法了

如果要实现自定义比较函数则需要重新指定cmp为你构造的比较函数,如下:

numbers = [5,2,9,7]

def reverse_numeric(x, y):

return y - x

numbers.sort(cmp = reverse_numeric)

#也可以直接写成

numbers.sort(revers_numeric)

#或者直接传入匿名函数

numbers.sort(lambda x,y: y-x)

另外,在python3.x中取消了cmp参数,也不支持直接往sort()里面传函数了。可以构造排序函数传递给key来实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值