关于Python 2和3的破事儿

我是个喜欢尝鲜的人,所以机器上的JDK、GoLang都是最新的,反正PC也不是生产环境。最近重装机器,又正好看到Python 3.7的Alpha版本出来了,就下载了个最新的版本装上,结果悲剧了,pip安装TensorFlow死活不行。折腾小半天,还是乖乖地换回3.6.x,这是TensorFlow Python API所支持的最新版本。

前些日子,跟两个兄弟聊天,突然奇想,打算做个MUD游戏来怀下旧。有个很不错的MUD的框架叫Evennia,是Python写的,而且是基于2.7的。我对机器的软件环境有一种近乎变态的要求,混乱的版本搞在一起当然不能接受,于是就用另一台笔记本安装了Python 2.7,用不同的电脑做不同的事。

大家都晓得,Python 2和3的差异很大,所以官方也还在同时维护2.7和3.x两套东西。这么多年过去了,Python社区做了很多2to3的兼容性工作,按理说不存在选择2还是3的问题了。但是有一些老顽固的人和老顽固的库还在坚守2.x,这就给初学者带来了困惑,到底该学哪一个。

对于初学者,我的建议当然是直接学Python 3,除非有明确的指征要求你必须用Python 2(比如我想做MUD的例子)。

Python 3和2在语法层面改进很大,所以源代码是不兼容的。Python 3是2008年发布的,至今10年了;Python 2的最后一个分支2.7是2010年中期发布的,此后就没有大的改动了。从性价比的角度,也应该选择学习Python 3,而不是花时间去鼓捣2.x。

从Python 3.3(2012年Release的)开始,所有对标准库的改进,都只在3.x版本中体现。这也表明了Python社区从2.x迁移到3.x的决心。Python官方网站上有一篇名叫《Should I use Python 2 or Python 3 in my development activity》的文章,有一句开宗明义的话:

Python 2.x is legacy, Python 3.x is the present and future of the language

作为初学者,是愿意跟一个前朝遗老玩呢,还是愿意跟进Python的现状及未来?

最让人担心的,其实是第三方库和框架,有的还在继续用Python 2.x。我翻了一下github上的一些项目,发现但凡还停留在2.x的,基本处于没人维护的状态。大多数广泛使用的库,都已经兼容Python 3了。Python官网上列出了一些,包括机器学习中最常用的数值计算库Numpy和SciPy,机器视觉常用的OpenCV 3, HTTP库Request,XML PARSER库lxml,WEB框架Django.....关于3和2的兼容性,pythonhosted上有篇文章《Six: Python 2 and 3 Compatibility Library》讲得非常详细,大家可以参考。

可能也会有高手告诉新手,语法层面的差别不算事儿,Py2和Py3没有区别,编程思想数据结构算法才是核心吧啦吧啦,但是我觉得手锯和电锯还是有区别的。Python作为一门如日中天的动态语言,在不断进化,语法改进的背后,也就是“编程思想”的改进。PL作为一个艰深的计算机科学分支,语法演化的背后是有深刻的思想性的东西的,轻视语法及其语义是不对的。

我的一个朋友遵循最新的C# Spec写了一个软件,然后告诉我说:这代表了我2017年的编程水准(他从1988年开始编程)。我看了看,好多我没见过的东西。虽然前几年我也用C#写过一款赖以谋生的软件产品,但编程方式还比较古老一点,没有深入了解C#语言的最新发展,换言之,也没有了解C#的编程思想。

新的一年里,如果想学一门新的手艺,就学Python 3吧。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180107G09WJ100?refer=cp_1026

同媒体快讯

  • 凡遮掩处,皆有想象

    2018-10-23
  • 深度学习有多深?

    2018-10-23

相关快讯

扫码关注云+社区