Python 内置 max/min 函数的默认键

8 投票
2 回答
9105 浏览
提问于 2025-04-17 07:41

Python内置的maxmin函数的说明书上说,key这个参数应该和sort函数里的用法一样。也就是说,我应该可以这样做:

a = [1, 2, 3, 4]
max(a, key=None)

但是,这样做会出现一个错误: TypeError: 'NoneType' object is not callable

不过,如果我用sort函数做类似的事情,就能得到我想要的结果:

a = [1, 2, 3, 4]
a.sort(key=None)

没有出现错误,并且使用了默认的排序方式。很多书也暗示我应该能在maxmin函数中得到同样的效果。比如这本书的摘录:Python in a Nutshell.

那么,maxmin函数的默认行为真的是这样吗?应该是这样吗?难道它们不应该和sort函数一致吗?

2 个回答

8

@David的回答非常好。我再补充一下,如果你在想,默认的 key 值(在 sortmax/min 函数中)大概是这样的:

lambda x: x
24

你发现了一个关于 .sortmax 的实现差异,这其实不是语言本身的问题。

list.sort() 方法有一个叫做 "key" 的参数,默认值是 None。这意味着当你传入 key=None 时,排序方法无法判断你是故意传了这个参数,还是它只是用了默认值。在这两种情况下,它的表现都像是没有提供任何关键函数。

max 方法则会检查 "key" 参数是否存在。它没有默认值,如果你提供了这个参数,它的值就会被用作关键函数。

无论如何,"key" 参数不应该被设置为 None。它应该是一个函数,用来从列表或可迭代对象中的项目提取出一个 "key" 值。例如:

a = [("one", 1), ("two", 2), ("three", 3), ("four", 4)]
a.sort(key=lambda item:item[1])

撰写回答