Python 为什么排序()和#x27;s键参数需要一个关键字参数

Python 为什么排序()和#x27;s键参数需要一个关键字参数,python,python-3.x,sorted,keyword-argument,Python,Python 3.x,Sorted,Keyword Argument,如果检查Python内置的sorted()函数的签名,如下所示: import inspect print(inspect.signature(sorted)) 签名是:(iterable,key=None,reverse=False) 根据我对获得的位置参数和可选参数的理解,您似乎可以提供一个iterable参数,然后提供一个key参数,而不需要为key参数提供关键字key=。但是在传递key参数时,始终需要指定key=。为什么呢 我知道如果您想指定reverse=True,但没有任何key

如果检查Python内置的
sorted()
函数的签名,如下所示:

import inspect
print(inspect.signature(sorted))
签名是:
(iterable,key=None,reverse=False)

根据我对获得的位置参数和可选参数的理解,您似乎可以提供一个
iterable
参数,然后提供一个
key
参数,而不需要为
key
参数提供关键字
key=
。但是在传递
key
参数时,始终需要指定
key=
。为什么呢

我知道如果您想指定
reverse=True
,但没有任何
key
参数,那么您需要一个关键字,但我不理解为什么在提供
键时需要指定
key=

这是排序中的一个错误。\uuuuu text\u signature\uuuuuu
,它缺少所需的
/
*
,以指示
iterable
仅为位置,而
key
reverse
仅为关键字。补丁正在补丁审查中,分配给Raymond Hettinger。补丁版本发布后,签名应显示为

(iterable, /, *, key=None, reverse=False)

事实上,现在我更困惑了。为什么不让函数按照当前签名的方式工作?让函数只使用关键字参数有什么意义?@user123123:
sorted
list.sort
用于获取
cmp
参数。当删除该选项时,使用
反向
关键字只会为仍试图使用
cmp
的代码提供更清晰的错误,从而有助于转换。此外,它使将来对接口的更改更容易,而且您不必记住参数的顺序。