Python内置最大/最小函数的默认键

时间:2011-12-05 01:43:41

标签: python

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函数的默认行为吗?应该是吗?它们不应该与排序功能相匹配吗?

2 个答案:

答案 0 :(得分:23)

您偶然发现.sortmax的实施方面存在差异,而不是语言问题。

list.sort()采用关键字参数“key”,默认为None。这意味着sort方法无法区分您提供key=None参数或仅仅采用默认值。在任何一种情况下,它都表现得好像没有提供任何关键功能。

另一方面,

max检查是否存在关键字参数“key”。它没有默认值,如果存在,它的值被用作关键函数。

无论哪种方式,密钥都不应该作为None提供。它应该是一个函数,用于从列表/ iterable中的项中提取“key”值。例如:

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

答案 1 :(得分:7)

@大卫的回答是完美的。只需添加,如果您想知道,默认的key值(sortmax / min函数中)都是这样的:

lambda x: x