首页 > 解决方案 > 为什么可以将一个类传递给 Python 的 sorted() 函数的 key 属性?

问题描述

我遇到了类似这样的代码,并试图了解它是如何工作的。从 sorted() 的 python 文档中,key参数接受一个函数,该函数接受一个参数,然后返回一个要在比较中使用的键。此代码正在分配key一个类。这怎么行?以及如何__lt__获取xy传递给它?

class K(str):
    def __lt__(x, y):
        return x > y
input = [3, 30, 7]
sorted(input, key=K)

输出:[7, 30, 3]

标签: python

解决方案


python 使用鸭子类型,所以它不检查键是否是一个函数,它只是调用它。key 参数用于 sorted 以确定要比较的内容。在这种情况下,不是比较 [3, 30, 7],而是比较 [K(3), K(30), K(7)]。这也是为什么实现了一个 __lt__ 方法,用于小于比较


推荐阅读