语言设计问题。
以Python为例。
在与list.sort()
和sorted()
之间的区别有关的问题的答案中引用comment:
通常,当python函数返回None时,这是一个标志,表明操作已就位,这就是为什么当您要打印list.sort()时它返回None的原因。
我想知道就地修改方法应返回None
的语言设计原则的原因。例如,出于好奇,为什么list.sort()
(以及其他就地修改函数/方法)不能返回自身?
一个可能的论据是,这样做可以避免创建副本,并且可以更快。但是,在Python中复制列表只会创建一个引用,而且应该不会太昂贵。
从字面意义上讲,另一个自变量不应为list.sort()
。那么,采用另一种既可以修改列表又返回副本的方法又叫它list.sorted()
呢?我想拥有这样一种方法将有助于某些用法。
答案 0 :(得分:2)
如果list.sort
将返回其自身的副本,那么程序员不知道排序发生在哪儿,将很高兴编写如下代码:
def foo(my_list):
return my_list.sort()
由于此方法有效,他们可能会认为排序仅在列表的副本上进行,直到有一天他们意识到自己一直在向代码中引入细微的错误。
首先否认此代码有效,从而从语言中完全消除了歧义和错误源。