为什么 Python 在 list.reverse() 上返回 None?

Don*_*one -1 python software-design

正在解决算法问题,必须颠倒列表。完成后,我的代码如下所示:

def construct_path_using_dict(previous_nodes, end_node):
    constructed_path = []
    current_node = end_node
    while current_node:
        constructed_path.append(current_node)
        current_node = previous_nodes[current_node]
    constructed_path = reverse(constructed_path)    
    return constructed_path
Run Code Online (Sandbox Code Playgroud)

但是,一路上,我尝试了一下,return constructed_path.reverse()发现它没有返回列表......为什么会这样?
我应该能够直接返回反向列表,而不需要先执行list.reverse()or ,这难道不有意义吗list = reverse(list)

Foo*_*dom 5

我要写的内容已经在这里说过了,但无论如何我还是要写它,因为我认为它可能会增加一些清晰度。

\n

您问为什么该reverse方法不返回(对结果的引用),而是就地修改列表。在官方的Python教程中,它是这样说的:

\n
\n

您可能已经注意到,仅修改列表的插入、删除或排序等方法没有打印 \xe2\x80\x93 返回值,它们返回默认的 None。这是Python中所有可变数据结构的设计原则。

\n
\n

换句话说(或者至少,这是我的想法) - python 尝试尽可能就地变异(即,在处理不可变数据结构时),并且当它就地变异时,它不会返回对列表的引用 - 因为这样看起来它正在返回一个列表,而实际上它返回的是旧列表。

\n

需要明确的是,这仅适用于对象方法,而不适用于采用列表的函数,例如,因为该函数无法知道它是否可以改变传入的可迭代对象。您传递的是 a 还是lista tuple?与对象方法不同,该函数无法知道。

\n