Python 2 与 Python 3

Python 2 与 Python 3

编程语言应该尽可能保持向下(前)兼容,牵一发动全身,更何况是 语言 如此底层的设计,它的变动会带来多少的不便,可想而知。
但 Python 不是,Python 3 与 Python 2 是不同版本,也是两个不同事物,你在 Python 2 上写出来的代码,很大概率上,在 Python 3 上各种报错。
这种版本的进化,是令人诟病的。但作为一个工具的使用者,不去深究其决策背后,接受现实,完成自己的作品才是更重要的事情。

选择 Python 2 还是 Python 3 ?

23 并存的早期,Python 的生态 (就是众多的第三方库) 对 Python 3 是不友好的,因为很多代码要重写。
但随着时间的变化,基本上 2 中存在的库,都已经完成了向 3 迁移的过程,而且大量是同时兼容 23 的。
另外,到 2020 年,Python 官方将会停止对 Python 2 的维护。
还有,对于大多数人而言,选择老旧的 2 是不思进取的表现。

所以呢,不论从哪个角度来看,似乎都应该选择 Python 3 而不是 Python 2 ?

请保持自己的思考

Python 作为一门编程语言,一直被诟病的是 。它的 是跟 C 语言此类相比,而不是与其它同样为脚本语言(如 Ruby、PHP、Node) 相比。
我们中绝大部分人,是没有资格去谈论 Python 的,因为它的性能瓶颈,你基本上不会碰触到;即使真的碰触到了,你也会找到一定的对应方法。相比较性能上的欠缺,更有价值的是 Python 这门语言带来的其它好处。当然,另外一方面,不少人说的『慢』是自己能力导致,不管让他用什么语言,都不容易快起来。

Python 绝然不是完美的,可以赞美,可以批判。
而侃侃而谈的,多数是哗众之徒。Python 的快与慢,是如此;选择 Python 2 还是 Python 3 之争,也是如此。
即使同在 Python 门下,也有不少人 (特别是自以为老手的新手) 会倾向性因为 Python 3 而对 Python 2 产生鄙夷,从而增加自我的骄傲感。着实没有这个必要。

我们思考一个问题:一个 Python 2 的库可以很容易地转成同时兼容 2 与 3 的版本,那么对于你来说,先掌握 Python 2 还是先掌握 Python 3,真的有什么区别吗?
不论 Python 2 还是 Python 3,毕竟都还是 Python,底子是一样的呀!
『 2 还是 3』,初学者会认为这是入门时至关重要的的一次选择,其实,小题大作了。


此处我更想说的是,保持警惕。一些看起来头头是道,说起来也没有什么错误的,只是并不重要而已。


我们的课程,是在 Python 2 的基础上展开的。
原因很简单,因为课程中涉及到 DNS Server,它主要的代码逻辑,我自己已经稳定跑了很多年,年份已经决定了它就是在 Python 2 的基础之上。
转成 Python 3.0 自然是容易的事情,但要花更多的时间去验证本身的稳定性,只是从教学的角度出来,是否有必要呢?

这个『疑问』可以当做一种谨慎,也可以理解为一种懒惰,甚至是不思进取的『懒惰』。我可能是错的,不过,即时错了,倒也没有什么问题,入门的过程中,2 和 3 的差别不大。
另外一方面,也一直是《全端》提倡的:你应该有自己的想法,我错了,也不影响你保持正确,很多人说同样的话,也不影响你认为他们是错的。
当然,最后可以自己试试把课程最终的一些成果,在 Python 3 上也跑起来。

注: 如果你写的是一个 package,那么同是兼容 2 与 3,是恰当的;反之则没有必要同时兼容。如果是一个独立产品、项目,最好在开始的时候就决定是 2 还是 3,如无偏好或者限制性条件,当然选 3。