Python中void(无返回值)方法的形成原因及原理解析
为什么
t = t.sort()会得到None? 你遇到的问题核心在于Python中list.sort()方法的设计逻辑:它是一个原地修改的方法,不会返回排序后的新列表,而是直接对原列表进行排序操作,执行完成后返回None——这就是你说的“void方法”在Python里的具体表现。
底层设计的原因
Python针对可变对象(比如列表、字典这类可以修改内容的对象)的很多方法,都采用了“原地修改+返回None”的设计,主要有两个考量:
- 内存效率:如果排序时生成新列表,对于大列表来说会额外占用一倍的内存空间,原地修改能避免这种不必要的内存消耗。
- 行为明确性:把“修改原对象”和“生成新对象”拆分成两个不同的操作,避免开发者混淆。比如和
sorted()函数对比:sort():修改原列表,返回None,专注于“修改”行为sorted():不改动原列表,返回新的排序列表,专注于“生成新对象”行为
正确的写法
如果你想让原列表变成排序后的状态,直接调用方法即可,不需要赋值:
t = ['d', 'c', 'e', 'b', 'a'] t.sort() # 此时t的值为['a', 'b', 'c', 'd', 'e']
如果需要保留原列表,同时得到排序后的新列表,就用sorted()函数:
t = ['d', 'c', 'e', 'b', 'a'] sorted_t = sorted(t) # t还是原来的['d', 'c', 'e', 'b', 'a'],sorted_t是排序后的新列表
同类的“void”方法例子
Python里还有不少类似的方法,都是原地修改后返回None,比如:
list.append(item):给列表末尾添加元素list.extend(other_list):将另一个列表的元素合并到当前列表dict.update(other_dict):用另一个字典的键值对更新当前字典
内容的提问来源于stack exchange,提问作者Dreaj
相关产品推荐
相关产品推荐

