python - 为什么可以将一个类传递给 Python 的 sorted() 函数的 key 属性?
问题描述
我遇到了类似这样的代码,并试图了解它是如何工作的。从 sorted() 的 python 文档中,key
参数接受一个函数,该函数接受一个参数,然后返回一个要在比较中使用的键。此代码正在分配key
一个类。这怎么行?以及如何__lt__
获取x
和y
传递给它?
class K(str):
def __lt__(x, y):
return x > y
input = [3, 30, 7]
sorted(input, key=K)
输出:[7, 30, 3]
解决方案
python 使用鸭子类型,所以它不检查键是否是一个函数,它只是调用它。key 参数用于 sorted 以确定要比较的内容。在这种情况下,不是比较 [3, 30, 7],而是比较 [K(3), K(30), K(7)]。这也是为什么实现了一个 __lt__ 方法,用于小于比较
推荐阅读
- google-apps-script - 使用按钮更改多个单元格的值
- java - 如何限制变量的值?
- sql - 反序列化要记录的文本
- python - 字符串格式在 for-if-do 命令中不起作用以进行批处理
- node.js - Node.JS 的 Heroku 错误代码 H12 问题,MongoDB 地图集的后端
- javascript - 盈透证券 API - Javascript 期权价格
- java - 使用 glRotatef() 时的 OpenGL 坐标问题
- php - array_filter($_POST) - 排除一些表单字段
- javascript - 如何将 JSON 放入 JavaScript 对象数组?
- r - 在 R 中绘制二进制列总和,然后用分类变量的比率覆盖这些列