"键"参数keyword-only in list.sort(),但sorted()

时间:2017-06-26 09:25:14

标签: python list python-3.x sorting

在Python 3中,lists可以用两种方式排序。使用list.sort(*, key=None, reverse=None)或使用sorted(iterable, key=None, reverse=None)生成新列表,就位。

从签名中可以看出,keylist.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'])

这背后的原因是什么?我假设有人会使用仅限关键字的参数来强制执行更清晰的代码,这是正确的吗?如果是这样,为什么在这些方面有两种不同的方式 - 可以说非常相似 - 功能?

1 个答案:

答案 0 :(得分:2)

sorted实际上还需要keyreverse作为关键字参数;文档明确说明:

  

有两个可选参数,必须指定为关键字参数。

只有函数签名(错误)不包含*;可能是文件中的疏忽。