Python 3 会流行起来吗?

23 投票
5 回答
5436 浏览
提问于 2025-04-15 20:40

我最近在学习一些Python 2和Python 3,感觉Python 2整体上比Python 3要好。这就是我想问的问题了,真的有必要换到Python 3吗?

5 个回答

7

Python 3将成为未来的新标准。

因为近期没有计划对Python 3进行大规模的重大改动,所以越来越多的人会转向使用它。因此,虽然现在还有很多Python 2的应用程序,但最终这些应用程序会逐渐升级到Python 3。其实还有一个工具可以帮助这个过程,叫做2to3

另外,你为什么觉得Python 2比Python 3好呢?在Python 3中做了很多语言上的改进,甚至连IDLE(一个Python的开发环境)也得到了提升。升级的一个主要原因是unladen-swallow将会引入Python 3,这会大幅提升性能。

18

正如其他回答提到的,Python 2目前唯一真正重要的优势就是它已经有很多第三方扩展和辅助工具(比如开发环境等),而Python 3还在慢慢追赶这个进度。不过,这种情况在逐渐改善,因为现有的扩展正在被移植到支持Python 3;迟早会有人发布一个只支持Python 3的重要扩展或工具,这可能会让你决定在新项目中使用Python 3(这对不同的人来说都会发生)。

Python的核心开发大部分已经转向Python 3了——虽然Python 2.7很快就会发布,但我不确定未来会有多少重要的功能更新会继续回到Python 2版本上。特别是,我怀疑Unladen Swallow会被移植过来——如果真是这样,那么CPython 3在某个时候会比CPython 2有更明显的速度优势,这可能会成为其他新项目(以及现有项目的移植)转向Python 3的关键因素。

我不太明白你为什么会觉得“Python 2总体上比Python 3好”,当然这里说的只是“Python本身”,也就是Python软件基金会发布的部分(核心代码、库、文档等):我对此持强烈不同的看法。Python 3在简洁性(去掉多余的东西)和一些能支持未来第三方扩展和工具的特性上更好(比如更好的类交互和参数注解的语法);实际上,我找不到Python 2在“Python本身”方面的任何优势。关于Python的“生态系统”,如前所述,是另一回事,但这方面也在进步(当然是以自己的节奏在进展,这并不在Python软件基金会的控制之下,而是由许多外部开发者和一些公司来推动的)。

例如,PyQt已经可以在Python 3(以及2)上使用,你还可以通过py-postgresql使用PostgreSQL(一个出色的开源SQL数据库引擎,比MySQL更标准)。所以,如果你想要的第三方扩展是(比如说)wxpython和mysqldb,也许你可以尝试这些替代品(当然我有偏见,因为我一直更喜欢Qt而不是wxWidgets,技术上也更倾向于PostgreSQL而不是MySQL——但相关Python扩展迅速移植到Python 3也暗示这些扩展正在更积极地开发,这可能也是你尝试它们的一个理由)。

32

总体来说,Python3比Python2要好,甚至在很多细节上也是如此。

唯一让Python 3落后的地方第三方库的支持
Python之所以优秀,不仅仅是因为它作为一种语言本身的特点和相对丰富的标准库,还有一个完整的“生态系统”,里面有很多支持各种特定应用的库。
目前,有一些库还没有完全迁移到Python 3.x,这导致一些开发者仍然在使用Python 2.x。

这种情况有点像“鸡和蛋”的问题:应用开发者不会转向3.x,直到这些库“到位”;而库的开发者更愿意只维护一个版本,他们在等待时机,想在迁移到Python 3时,能很快把Python 2.x的版本转为维护状态。

这种情况在某种程度上反映了人们对Python 2.x的满意度(或者说,缺乏真正有吸引力的理由去转向3.x;虽然Python 3更好,并且未来会有更好的发展,但就目前而言,它并没有什么特性能促使大家“大规模”转向3.x)。不过,我相信现在的趋势是支持Python 3的
为了支持这一点,我想提到Unladen Swallow可能只会迁移到Python 3,这为转向提供了很强的动力。但Alex Martelli已经开始回答这个问题,并且用这个例子来说明。显然,Alex对这些路线图问题有第一手的了解,大家可以向大师请教!

关于Python 3版本的一个提醒:一定要使用最新的版本(目前是3.1.2,之后3.2.x将成为最新的稳定版本)。
注意,有些人(像我)偶尔会用"3.0"来指代所有的Python 3(甚至是当前的版本)。短命的3.0版本现在已经“过时”,对普通人来说没有什么意义,可能只有法医专家会感兴趣 ;-)

撰写回答