为什么sorted()函数的key参数需要使用关键字参数?

4
如果你像这样检查 Python 内置的 sorted() 函数的签名:
import inspect
print(inspect.signature(sorted))

签名是:(iterable, key=None, reverse=False)

根据我对位置参数和可选参数的理解(此处链接不提供),似乎您可以提供一个iterable参数,然后再提供一个key参数,而无需为key参数使用关键字key=。但是,当传递一个key参数时,您总是需要指定key=。为什么会这样呢?

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

1个回答

3
这是Python问题26729,在sorted.__text_signature__中出现了错误,缺少了指示iterable为位置参数,keyreverse为关键字参数所需的/*。补丁正在进行中,由Raymond Hettinger负责。修复版本发布后,签名应显示为:
(iterable, /, *, key=None, reverse=False)

其实,现在我更加困惑了。为什么不让函数按照当前的签名工作呢?使用关键字参数的方式有什么意义呢? - user4694244
1
@user123123123:sortedlist.sort曾经接受cmp参数。当移除该参数后,将keyreverse设为关键字参数有助于过渡期间更清晰地报错,以便发现仍在尝试使用cmp的代码。此外,这也使得未来对接口的更改更加容易,并且你不必记住参数的顺序。 - user2357112

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接