python3中自定义比较器

在python2中,无论是list.sort还是sorted函数,都有一个cmp参数,可以让我们很方便的自定义比较器。在python3中,这个参数被砍掉了,因为key参数可以在很多情况下代替它,Python HOW TO 详细介绍了它的使用方法和使用场景。但是有一种场景是它解决不了的: 当涉及多个参数,需要做比较复杂的比较的时候,比如我需要通过拼接字符串xy,yx来自定义比较器。这个时候就需要python2中的cmp这个参数了。

stackoverflow中找到了解决方法,原来在itertools模块有个cmp_to_key这个函数,用它来包装一个自定义的比较函数,然后传递给key参数,作用就和python2的cmp一样了。

不过需要注意一点的是,在我们自定义比较器的时候,需要返回的是正负而非True or False,如果用后者,比较的时候,只会返回一种结果,因为False的整数值是0