为什么在Python中使用`sorted`而不是`sort`?

4
作为一种新语言,我无法理解为什么Python中两个内置函数sorted和reversed要以过去分词形式命名,而其他函数如format或filter则以动词形式命名。这些函数为什么不能像其他几种语言一样被命名为sort和reverse呢?
从语义上讲,我更希望sorted返回一个布尔值--就像sorted?一样,指示传递的列表是否已排序,但这可能是其他语言对我的影响。
但是,为什么将sorted和reversed命名为这种方式,我无法理解?
更新:由于几乎所有的答案/评论都没有点到关键,因此我想强调一下。我知道这两个函数都返回新的对象,不会修改传递给它们的内容。
但是,在同样的精神下,filter不能被命名为filtered,format不能被命名为formatted吗?这样的话,整个语言的命名就更加一致了。
第二次更新:既然这个问题似乎是基于“观点”的,那么很可能只是语言设计者的观点使它被这样命名。也许在Python内置函数命名方面并没有理由保持一致性。
如果有理由,请帮忙回答:format是否也可以被命名为formatted以实现统一性和一致性?

因为 sorted 返回一个新列表,它不会对给定的列表进行操作。 - Sayse
你的问题是关于什么的?改变语言的语法吗? - Nijat Mursali
3
你可能已经知道了,Python中存在sortreverse这两个列表方法。我猜测内置函数sortedreversed被赋予不同的名称,是因为它们与它们的方法版本执行不同的操作。具体而言,方法会就地修改列表并返回None,而函数则不会修改列表,并返回一个带有所需修改的对象的新副本或迭代器。 - Kevin
我实际上希望你的示例中有类似于 if issorted(lst): 的东西;我猜 sorted 可以被看作是一种缩写形式,但它也可能会变得令人困惑。 - 9769953
3
询问一个函数为什么被赋予某个名称或另一个名称,基本上是基于观点的。 - chepner
显示剩余6条评论
1个回答

4

在Python中,sort是原地排序函数,sorted是返回新排序集合的函数:

a = [2,3,1,4]
print(sorted(a))
print(a)
print(a.sort())
print(a)

输出:

[1, 2, 3, 4]
[2, 3, 1, 4]
None
[1, 2, 3, 4]

第一个打印输出的是排序后的列表,原始列表不会被改变。第三个打印输出的是 a.sort 的返回结果 - None (因为它没有返回值)。在函数调用后,原始列表被排序了。

reverse/reversed 函数也有同样的行为。


谢谢你的回答。我知道sorted会返回一个新的列表。但是同样的精神,filter不也可以是“过滤”,format不也可以是“格式化”吗? - shau.malh

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