在Python 3中,lists
可以用两种方式排序。使用list.sort(*, key=None, reverse=None)
或使用sorted(iterable, key=None, reverse=None)
生成新列表,就位。
从签名中可以看出,key
是list.sort()
中的keyword-only参数,但是sorted()
中的位置或关键字参数。这意味着这样的调用将失败:
>>> [{'i': 42}, {'i': 0}].sort(lambda x:x['i'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must use keyword argument for key function
必须这样写:
>>> [{'i': 42}, {'i': 0}].sort(key=lambda x:x['i'])
这背后的原因是什么?我假设有人会使用仅限关键字的参数来强制执行更清晰的代码,这是正确的吗?如果是这样,为什么在这些方面有两种不同的方式 - 可以说非常相似 - 功能?
答案 0 :(得分:2)
sorted
实际上还需要key
和reverse
作为关键字参数;文档明确说明:
有两个可选参数,必须指定为关键字参数。
只有函数签名(错误)不包含*
;可能是文件中的疏忽。