阿布云

你所需要的,不仅仅是一个好用的代理。

Python的2与3

阿布云 发表于

22.png

由于一系列关于新书《Python Web开发实战》的私信、留言、群讨论中,提及最多的问题竟然是「这个书是基于Python 2还是基于Python 3?」!实在崩溃,我还是写篇文章直接阐述下我的观点吧。

上周在公众号《编程派》的「 荐书 | 跟着豆瓣工程师学Web开发 」的留言中我的回复如下:

编程重在编程思想的理解和经验积累,语法其实只是表达方式而已,Python 2/3思想是相通的,只有少量语法差别和不兼容. 对Python熟悉到一定程度可以在很短时间写Python 3。书中还说了更细的选择建议。

我们首先看看Python 2 和 Python 3有什么不一样(其实就是看「What’s New In Python 3.X」):

1. 一些历史遗留或一开始的设计思路等原因造成的问题在Python 3获得了一些改善,改动/删除了一些语法,但是也存在了一些和Python 2的不兼容。

2. 增加了一些新特性和语法,比如asyncio。

3. 添加/删除/移动了一些标准库。有些第三方库被合并进了标准库,比如pip、venv、enum。

其实就这三条吧?有的人说了:「哎呀,至今搞不懂Python 2的unicode、string、bytes、中文的编码... 」这就是你没学好好吧,怪Python 2伐?

对于业务来说,这些改变并不足以说服大家要迁移到Python 3,我个人关心的有几点:

1. 新的特性和语法有没有对现有开发模式产生足够积极作用。

2. 性能有没有提高的足够多。

3. 迁移成本是不是可以接受。

目前国内,我也没听过那些公司或者大的产品正在迁移或者已经迁移到Python 3,其实说白了,就是Python 3没有让大家足够动心。Python 2会维护到2020年,但是不代表2020年之后Python 2就不能用了,那你让那些跑了可能10多年,几十万行代码的项目必须迁移么?其实最多就是在新的项目上用Python 3,老的项目还是维持现状。所以,Python 2在至少未来10年都会有市场的。如果你有幸维护这样的老项目,还既要求你会Python 2也要求你会Python 3,甚至写Python 2/3兼容的代码呢。

不可否认,Python 3是未来!很多库都在迁移,但是注意哦,他们是Python 2/Python 3兼容,不是直接干掉Python 2的支持,虽然未来会有一天像现在的一些项目放弃Python 2.5的支持一样放弃Python 2。库和实际公司的项目不同,驱动力和项目代码级别差别很大,要是个几千行的项目,我们一会就迁移完了,但是动辄上百万行的项目,我们怎么获得pm和boss的支持呢?

会Python的人, Python 2和Python 3都会写。 我很好奇现在的人,不去学习Python,一直在纠结「Python 2 or Python 3」这种话题。其实现在随便学习Python 2和Python 3,不用等2020年就可以随便写Python 2/3的代码了。有的人又问了:「既然Python 2终将死去,为啥现在还要学习那些未来会被淘汰的语法和内容」,因为时间还不到,潮流还没来,仔细对比Python 3的淘汰语法和内容,我发现平时工作中常用的,对编程习惯有影响的是很少的,也花不了你几个小时...

在我写书开始,编辑就问过我「你这本书是基于Python 2还是Python 3的啊?如果是Python 3还是个卖点呢」,我说外行人就会这么问... 我当时的回答是「如果现在是2019年或者更晚,这本书绝对是全部使用Python 3完成的,但是现在是2016,这本书的内容是给开发者实际在工作中用的,别因为使用Python 3写,读者拿回去公司由于在用Python 2而不能直接用...」

扯了这么多,上建议:

1. 如果你Python已经有了一定基础,学习Python 2和Python 3兼容的写法,经常留意和巩固Python 2和Python 3的那些不同的地方,多积累2to3的经验,在自己的项目中练习Python 3。

2. 工作中用的某些模块或者库还不支持Python 3,又没有精力、能力和排期完成兼容,首选Python 2。

2. 如果你现在初学Python,首选Python 2。如果你看这篇文章的时候已经是2018年或者更晚,首选Python 3。

希望看完本文的读者,之后再也不讨论和关注这类问题,而是just do it。