我是个喜欢尝鲜的人,所以机器上的jdk、golang都是最新的,反正pc也不是生产环境。最近重装机器,又正好看到python 3.7的alpha版本出来了,就下载了个最新的版本装上,结果悲剧了,pip安装tensorflow死活不行。折腾小半天,还是乖乖地换回3.6.x,这是tensorflow python api所支持的最新版本。
python 3.6.2
前些日子,跟两个兄弟聊天,突然奇想,打算做个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》讲得非常详细,大家可以参考。
最新的release::python 3.6.4
可能也会有高手告诉新手,语法层面的差别不算事儿,py2和py3没有区别,编程思想数据结构算法才是核心吧啦吧啦,但是我觉得手锯和电锯还是有区别的。python作为一门如日中天的动态语言,在不断进化,语法改进的背后,也就是“编程思想”的改进。pl作为一个艰深的计算机科学分支,语法演化的背后是有深刻的思想性的东西的,轻视语法及其语义是不对的。
我的一个朋友遵循最新的c# spec写了一个软件,然后告诉我说:这代表了我2017年的编程水准(他从1988年开始编程)。我看了看,好多我没见过的东西。虽然前几年我也用c#写过一款赖以谋生的软件产品,但编程方式还比较古老一点,没有深入了解c#语言的最新发展,换言之,也没有了解c#的最新的编程思想。
新的一年里,如果想学一门新的手艺,就学python 3吧。