目录
为什么 Python 中列表的 sort 方法一定要返回 None 而不是排序后的列表?
none
sorted
感觉返回None简直反人类嘛,让多少人义无反顾的跳进这个坑中了
sorted无关 就是问返回排序后的列表不是更方便么
回复内容:
一般来说,返回 None 表示是在原对象上进行的操作。返回排序后结果意味着创建了一个副本。如果你需要返回排序后的,可以使用 sorted 函数。我感觉题主需要的其实是 sorted 函数而非 sort。 这是个好问题,坑过不少人。
1. 从设计角度来说,因为 Command-query separation
Command-query separation states that every method should either be a command that performs an action, or a query that returns data to the caller, but not both. In other words, asking a question should not change the answer. More formally, methods should return a value only if they are referentially transparent and hence possess no side effects.
也就是说只有引用透明,也就是没有副作用的函数,才应该具有返回值。
x.sort(),很明显,改变了 x 的值,具有副作用,所以不应该有返回值。
2.从易读性角度来说, Guido van Rossum 在 Python-Dev 邮件列表里也解释过为什么选择将 x.sort() 的返回值定为 None. (邮件原文:[Python-Dev] sort() return value)
3. 从性能和易用性角度来说,Python Doc 解释了为什么要这样设计(Design and History FAQ- List sort)。
In situations where performance matters, making a copy of the list just to sort it would be wasteful. Therefore, list.sort() sorts the list in place. In order to remind you of that fact, it does not return the sorted list. This way, you won’t be fooled into accidentally overwriting a list when you need a sorted copy but also need to keep the unsorted version around.这并不反人类。
一门编程语言提供了一个sort函数的时候,作为使用者第一个应该问的问题是:这个函数是in-place的还是返回一个新object。Python的sort是in-place的,那么排序完成后的列表就没有返回的必要了,当然返回None是最正确的做法,有什么坑可言? sorted函数和list的sort方法是不一样的
举个简单的例子,dog是一个对象,那dog.bark()应该返回什么?叫完了不就完了嘛,还返回啥。
但是如果有一个函数mated,那mated(dog)应该返回什么?日过的狗,mated_dog。
list.sort()是该list自身调用,list将自身(self)排序(sort)一下,自身(self)发生了改变,而排序这个动作本身是不需要返回什么的,再例如I.eat(apple),难道这个eat还需要返回一个我吗?
而sorted这个函数,是将传入的对象排序返回,这个函数没有什么自身的存在,所以不返回点什么东西,那就没意义了。
总之,这个问题属于面向对象的程序设计,不要用函数式编程的思维硬套。
PS: 以上都是我胡说的,我根本不懂什么面向对象,函数式。 因为当你需要它返回数组时,你写错了。
在你写错的时候可以提醒你,这就是返回空的作用。 让多少人义无反顾地跳坑了?呵呵没多少。 python 还有一个sorted函数
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章
刺客信条阴影:贝壳谜语解决方案
3 周前
By DDD
Windows 11 KB5054979中的新功能以及如何解决更新问题
2 周前
By DDD
在哪里可以找到原子中的起重机控制钥匙卡
3 周前
By DDD
刺客信条阴影 - 如何找到铁匠,解锁武器和装甲定制
1 个月前
By DDD
<🎜>:死铁路 - 如何完成所有挑战
3 周前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

在使用Python的pandas库时,如何在两个结构不同的DataFrame之间进行整列复制是一个常见的问题。假设我们有两个Dat...

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

Uvicorn是如何持续监听HTTP请求的?Uvicorn是一个基于ASGI的轻量级Web服务器,其核心功能之一便是监听HTTP请求并进�...

本文讨论了诸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和请求等流行的Python库,并详细介绍了它们在科学计算,数据分析,可视化,机器学习,网络开发和H中的用途

在Python中,如何通过字符串动态创建对象并调用其方法?这是一个常见的编程需求,尤其在需要根据配置或运行...
