为什么原则上就地修改方法应返回None

时间:2019-10-07 12:18:22

标签: python

语言设计问题。

以Python为例。

在与list.sort()sorted()之间的区别有关的问题的答案中引用comment

  

通常,当python函数返回None时,这是一个标志,表明操作已就位,这就是为什么当您要打印list.sort()时它返回None的原因。

我想知道就地修改方法应返回None的语言设计原则的原因。例如,出于好奇,为什么list.sort()(以及其他就地修改函数/方法)不能返回自身?

一个可能的论据是,这样做可以避免创建副本,并且可以更快。但是,在Python中复制列表只会创建一个引用,而且应该不会太昂贵。

从字面意义上讲,另一个自变量不应为list.sort()。那么,采用另一种既可以修改列表又返回副本的方法又叫它list.sorted()呢?我想拥有这样一种方法将有助于某些用法。

1 个答案:

答案 0 :(得分:2)

如果list.sort将返回其自身的副本,那么程序员不知道排序发生在哪儿,将很高兴编写如下代码:

def foo(my_list):
    return my_list.sort()

由于此方法有效,他们可能会认为排序仅在列表的副本上进行,直到有一天他们意识到自己一直在向代码中引入细微的错误。

首先否认此代码有效,从而从语言中完全消除了歧义和错误源。