Python中内置函数max
和min
的文档表明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)
不会生成错误,并使用默认排序。几本书也暗示我应该能够在max
和min
函数中逃避相同的行为。请参阅Python in a Nutshell的摘录。
这真的是max
和min
函数的默认行为吗?应该是吗?它们不应该与排序功能相匹配吗?
答案 0 :(得分:23)
您偶然发现.sort
和max
的实施方面存在差异,而不是语言问题。
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
值(sort
和max
/ min
函数中)都是这样的:
lambda x: x