|
|
|
|
移动端

1.6 使用Python 2还是Python 3

《Python Linux系统管理与自动化运维》第1章Python语言与Linux系统管理,本章将介绍Python语言的特性和应用场景。除此之外,本章还会讨论为什么Python适合Linux系统管理,以及一些大家容易忽视的重要数据,包括Python语言是否真的越来越流行,使用最多的Python版本,以及Python 2与Python 3所占的市场份额等。本节为大家介绍使用Python 2还是Python 3。

作者:赖明星来源:机械工业出版社|2017-09-28 16:01

技术沙龙 | 4月21日多位区块链专家进行区块链技术应用场景解读!


1.6 使用Python 2还是Python 3

Python的一大槽点是Python 2与Python 3不兼容,这有悖于我们对知名软件的认识。更让人纠结的是,Python 3发布至今已经将近十年,仍远不如Python 2使用广泛。相信在接下来很长一段时间内,依然会是Python 2使用更加广泛。

Python 2与Python 3不兼容就导致一个问题,如果读者是一个编程的初学者,应该学习Python 2还是学习Python 3呢?我的观点是都要学。这个答案可能很出乎意料,也很容易反驳,例如:

Python 3才是Python的未来。

Python 官方建议直接学习Python 3。

Python 2只维护到2020年。

作为一个一线互联网公司的Python技术专家,也是一名多年的Python工程师,大家不妨来看看我这么说的理由。

首先,编程其实重在对编程思想的理解和经验的积累,Python 2和Python 3的思想是共通的。甚至对于不同的编程语言,它们的很多思想也是共通的。Python 2与Python 3的语法虽然存在不兼容的情况,但是只有一小部分语法不兼容。并且,当我们对Python熟悉到一定程度以后,即使只会Python 2也可以在很短的时间内掌握Python 3的代码编写。

其次,Python 2只维护到2020年不应该成为你拒绝Python 2的理由。按照Python官方的计划,Python 2只支持到2020年,但这并不是绝对的。可能读者接触Python的时间还不长,Python官方曾经还说过,Python 2只支持到2015年。所以,可以看到,Python官方也是会跳票的。

最后,Python官方建议学习Python 3只是一种一厢情愿的行为。我们可以对此一下Python 2和Python 3的下载统计数据。虽然PyPI不再提供下载统计数据,但是,我们可以通过Google的统计数据得到Python 2与Python 3的大致使用情况。我们的统计方式是,在 https://cloud.google.com/bigquery/querying-data 中执行下面的语句查询不同Python版本依赖包的下载数据:

  1. SELECT details.python, count(*) as count FROM [the-psf:pypi.downloads20170615] GROUP BY details.python; 

我们只需要增加一个country_code取值为CN的where条件,就能够统计中国的Python版本使用情况。如下所示:

  1. SELECT details.python, count(*) as count FROM [the-psf:pypi.downloads20170615] where country_code = 'CN'  GROUP BY details.python; 

在Google的BigQuery中执行查询语句,然后将数据导出到本地进行分析,我们得到了图1-3中的统计数据。

从图1-3中可以看到,无论是全球范围内还是在中国,Python 2的市场份额都远胜于Python 3。因此,我们有理由相信,Python 2还会存在很长一段时间。

表1-2给出了全球范围内和中国的工程师使用最多的Python版本,可以看到,Python 2.7.12版本是目前使用最多的。

表1-2 不同Python版本的使用情况

从前面的统计数据可以看到,Python 2的使用远远超过了Python 3。有了这些数据做支撑,我们不是应该学习Python 2吗,为什么Python 2和Python 3都要学呢?首先,这个世界并不是非黑即白的,Python也不是。在学习Python 2和学习Python 3中间,其实有一个很好的平衡,那就是同时兼容Python 2和Python 3。为了做到同时兼容Python 2和Python 3,需要用到Python的__future__库。__future__库里面包含了不少从Python 3向后移植(backport)到Python 2的特性。充分使用__future__库,可以很好地兼容Python 2和Python 3。

其次,Python 2和Python 3确实有一些差异,但是,并没有我们想象的那么大。我们可以快速地了解Python 2的哪些语法在Python 3中被弃用,在我们写代码的过程中,规避掉这一部分语法即可。在Python的最佳实践中,Python 3里弃用的Python语法,在Python 2里面也不推荐使用,不然也不会被弃用了。如果读者知道并坚持Python的最佳实践,那么,对你来说,Python 2和Python 3的差异就更小了。

最后,我们可以参考优秀的开源软件(如OpenStack)的做法,努力做到代码同时兼容Python 2和Python 3(https://wiki.openstack.org/wiki/Python3),也可以借助一些开源的库(如six)来同时兼容Python 2和Python 3。

关于Python的版本问题,还有一些建议供大家参考:

1)学习Python前,先了解在Python 3中已经弃用的Python 2的语法,对这些部分简单了解即可,不要花费太多时间;

2)使用Python 2,不要使用Python 2.7以前的版本;

3)使用Python 3,不要使用Python 3.4以前的版本;

4)多了解Python 2的__future__库;

5)对同一份代码,不要为Python 2和Python 3分别维护分支,努力在一套代码中兼容Python 2和Python 3。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

网管员必读—服务器与数据存储(第2版)

本书是在第1版的基础上全面更新、改版而成的,仍然是目前图书市场中唯一一本全面介绍硬件服务器的IT图书。本书针对近两年来所出现的新服务...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊