Python内置函数min()和sorted()中的参数

3
我正在py.checkio.org上完成任务,我遇到了一个练习,需要编写自己的min()max()函数。
我已经阅读了官方文档中有关此函数的说明,并对所描述的参数感到惊讶,它们看起来像: min(iterable, *[, key, default]) 我想知道这个构造*[,是什么意思,这很奇怪,因为*args**kwargs很清楚,而[,arg]也很清楚。但是*[,非常奇怪,这个参数是什么意思?
附注:sorted()函数有一个奇怪的星号参数:sorted(... *, ...)这可能意味着什么?
2个回答

3
以下内容适用于Python 3(OP链接到此版本)。
sorted函数定义中,单个星号(*)表示所有后续的命名参数必须作为关键字参数提供(称为“仅限关键字参数”,详见PEP 3102)。这意味着以下代码将不起作用:
>>> sorted([1, 2, 3], lambda x: x)
[...]
TypeError: must use keyword argument for key function

相反,您必须通过关键字参数提供这些参数:

>>> sorted([1, 2, 3], key=lambda x: x)
[1, 2, 3]

我不完全确定, *[, key, default]语法的含义(它不是有效的Python代码,只是为了文档目的),但我认为开发人员想要表达的是同样的事情,即您必须提供这些参数作为关键字参数(因为minmax可以接受任意数量的位置参数,这是唯一的方法)。

@OP:当然,这是正确答案。我编辑了我的回答。 - bruno desthuilliers
谢谢,我一直在寻找如何在谷歌中搜索这个*行为,并卡住了。非常感谢您的解释。 - Сергей Астрейко
@brunodesthuilliers 是的,它有一些很棒的功能,绝对值得一看;-) - a_guest
@a_guest @brunodesthuilliers,大家好。你们知道在Python官方文档中关于*的解释可以在哪个URL找到吗? - Сергей Астрейко
@a_guest,您应该编辑您的答案,添加关于[, key, default]部分的解释,这些是可选的(在这种情况下只是关键字,因为它们遵循一个*)参数。 - bruno desthuilliers
@СергейАстрейко 这是我回答中链接的PEP 3102 - a_guest

3

[, key, default]这部分不是Python语法,而是通用编程语言语法,表示可选部分(这里是可选参数)。

编辑: * 部分在a_guest的回答中有解释(注意:这仅适用于Python 3)。


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