细数Python三十年技术演变史——萌发于小众,崛起于AI

做者 | 宋天龙
来源 | AI科技大本营

导语:一切都始于1989年的那个圣诞节,Python的诞生并不算恰逢其时,它崛起充满了机遇巧合,也有其必然性。三十年间,Python技术不断更迭,生态逐渐完善,加上互联网、大数据、以及人工智能这一波波浪潮的推波助澜,Python渐渐从小众最终站上了如今的高度。html

从历史发展的角度出发,咱们才能看清Python崛起的偶然性和必然性。本文将结合技术和产业的发展,全面透析Python的演进之路,帮助读者理解是什么造就了现在的Python。程序员

Python 1.0时代:起源与诞生

Guido van Rossum(下面简称Guido)是Python语言之父,他于1982年从阿姆斯特丹大学得到了数学和计算机硕士双学位,期间他接触了不少的语言,包括Pascal,C,Fortran等。正则表达式

在那个计算机资源贫乏的年代,像计算机同样思考并编程是每一个程序员必须面对的事情,这让他很是苦恼;同时他又很是欣赏shell,shell简单易编程的特性让程序员更加专一于设计和逻辑自己,但shell本质上是一个功能的调用,它没有本身的数据类型,更没法全面调用计算机功能,所以shell也不算是一门“语言”。shell

所以,他但愿找到一种语言既能够像使用shell同样简单,又能够和C语言的功能相媲美。不过这种语言在那个年代并不存在。数据库

1989年的圣诞节,Guido开始编写Python语言的编译器。Python这个名字来源于他喜欢的电视剧Monty Python’s Flying Circus,而不是表面意义上的“蟒蛇”。他但愿这个新的语言,能符合他的理想:介于C和shell之间,功能全面、易学、易用又可拓展。编程

1991年,第一个Python编译器诞生,这标志着Python的第一个版本正式诞生。它基于C语言,并具有了基础的类、函数、异常处理等功能特性,同时具有可扩展性。Python语法不少来自C,但又受到ABC语言的强烈影响。例如来源于ABC语言强制缩进的规定自己可让Python容易读,但若是缩进出错却会影响编译和执行。Python自己不以性能为重,但当确实须要考虑性能时,Python程序员却能够深刻底层来编写C程序,并编译为.so文件引入到Python中使用。后端

Python语言的魅力在于让程序员能够花更多的时间用于思考程序的逻辑,而不是具体的实现细节,这一特性也获得Guido同事的欢迎。他们在反馈使用意见的同时也参与到Python的改进中来,所以最初Guido和一些同事构成了Python的核心团队,固然,核心决策者仍是Guido本人。随后,Python的使用拓展到研究所以外,并吸引了愈来愈多的程序员。数组

可是,最初Python的使用很是小众,由于在那个计算机资源很是有限的年代,你们都倾向于最大化榨取计算机资源并提高运算效率,而Python显然不是为此而生。网络

Python 2.0时代:崛起

最初发布时,Python在设计层面存在一些缺陷,例如以知足跨语言、跨平台进行文本转换、处理的要求的Unicode字符编码标准在1994年才正式公布,因此一直以来Python 2及以前的版本对Unicode的支持并不彻底。相信你们在使用Python 2版本处理中文时都遇到过各类问题。数据结构

2000年发布的Python 2.0标志着Python的框架基本肯定。重要框架方向包括:

  • 简单明确。在设计Python语言时,开发者倾向于选择没有或者不多有歧义的语法。因为这种设计观念的差别,Python源代码一般被认为比Perl具有更好的可读性,而且可以支撑大规模的软件开发。
  • 面向对象。任何Python的元素均可以视为对象,包括数据类型、类、函数、实例化元素等,彻底支持继承、重载关系,这有益于加强代码的复用性。
  • 动态类型。任何对象的数据类型都无需提早定义,拿来即用。即便在以前已经预先定义,后期也可随时修改。
  • 胶水特性。Python自己被设计为可扩充的,并不是全部的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员可以轻松地使用C、C++、Cython来编写扩充模块。例如在Google对于Google Engine使用C++编写性能要求极高的部分,而后用Python或Java/Go调用相应的模块。
  • 可嵌入。你能够把Python的功能嵌入到C/C++程序中,从而实现Python功能在其余语言中的功能实现。
  • 生态系统。Python有强大的标准库,同时支持第三方库和包的扩展应用,甚至能够自定义任何库和包。Pypi(https://pypi.org/)是其第三方库的仓库,在这里你几乎能够找到任何领域内的功能库。
  • 解释器机制。Python支持多种解释器,例如CPython(官方版本,基于C语言开发,也是使用最广的Python解释器)、IPython(基于CPython之上的一个交互式解释器)、PyPy(一个追求执行速度的Python解释器,采用JIT技术对Python代码进行动态编译)、Jython(运行在Java平台上的Python解释器,能够直接把Python代码编译成Java字节码执行)、IronPython(和Jython相似,只不过运行在微软.Net平台上)。

1965年,戈登·摩尔提出了著名的摩尔定律,其内容为:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增长一倍,性能也将提高一倍。在随后超过半个世纪的时间里,我的计算机的发展突飞猛进,已经由资源不足向资源过剩转变。这客观上为Python的应用提供了基础条件——只有在资源过剩的条件下,程序员才不会过分关注榨取性能。

随着Python自身功能的完善以及生态系统的扩展,Python在Web开发、网络爬虫、数据分析与数据挖掘、人工智能等应用方面逐渐崭露头角。

Django和Flask引领的WEB开发模式

2004年,目前最流行的WEB框架Django诞生。2010年,另外一个流行的轻量级WEB框架Flask诞生。Django是一个WEB解决方案“全家桶”,其功能大而全,包含了几乎全部WEB开发相关的组件和功能,它能够大大节省开发者在基础组件、选型、适配等方面的时间和精力;而Flask只包含基本的配置,默认依赖于两个外部库也能够自由替换,给开发者提供最大的自主空间。这两类彻底相反方向上的WEB开发模式,几乎能够为全部开发者提供了很好的选型参照物:不管开发者想要一站式仍是最大化自主解决方案,Python都能知足。

此后,以豆瓣、春雨医生、知乎、Dropbox、YouTube、CIA(美国中情局)等为表明的企业和机构都基于Python作网站开发,预示着Python应用到WEB开发领域逐渐成为一种新兴趋势。

人人都能胜任的网络爬虫

Python自带的标准库中,urllib、urllib二、requests库对于简单网页的抓取实现很是简单,即便在面对海量数据抓取需求时,第三方库Scrapy也能应对自如;再配合正则表达式库re、网页代码解析BeautifulSoup、html和xml解析库lxml、多线程库threading等特性,使得Python在应用到网络爬虫任务上时,只须要不多的开发量便能迅速完成任务。基于Python简单易学的特性,几乎人人都能开发网络爬虫。

比shell更好用的自动化运维工具

Python是跨语言和平台的,几乎全部Linux系统和MAC系统都自带Python库,Windows系统也能够自定义安装。Python默认的os、sys等库可实现与操做系统的交互和执行功能,更重要的是Python还能直接执行系统终端命令。所以,使用Python编写的系统运维和管理脚本在可读性、性能、代码重用度、扩展性几方面都优于普通的shell脚本,在自动化运维方面应用普遍。

数据分析与科学计算三剑客

2008年发布的Numpy、scipy和2009年发布的pandas是数据分析与科学计算的三剑客。

NumPy(Numeric Python的简称)是Python科学计算的基础工具包,也是Python作数据计算的关键库之一,同时又是不少第三方库的依赖库。

Scipy(Scientific Computing Tools for Python的简称)是一组专门解决科学和工程计算不一样场景的主题工具包,它提供的主要功能侧重于数学、函数等,例如积分和微分方程求解。Pandas(Python Data Analysis Library的简称)是一个用于Python数据分析的库,它的主要做用是进行数据分析和预处理。

Pandas提供用于进行结构化数据分析的二维表格型数据结构DataFrame,相似于R中的数据框,能提供相似于数据库中的切片、切块、聚合、选择子集等精细化操做,为数据分析提供便捷。另外,Pandas还提供了时间序列的功能,用于金融行业的数据分析。

除此以外,不少大型公司也都在使用Python完成不一样类型的其余工做,其中不乏世界知名公司,如国外的Google、Facebook、NASA 、雅虎、YouTube等,国内的网易、腾讯、搜狐、金山等。例如谷歌在Google Groups、Gmail、Google Maps等项目中将Python用做网络应用的后端;在Google Cloud Platform中的Google Cloud Storage本地部署环境中,gsutil也在Python 2基础上开发和应用。

后Python2与Python3时代:AI让Python大放异彩

2008年12月,Python 3发布。Python 3相对于Python 2的早期版本(主要是Python2.6以前)是一个较大的升级,它在设计的时候没有考虑向下兼容,因此不少早期版本的Python程序没法在Python 3上运行。为了照顾早期的版本,推出过渡版本2.6——基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,容许使用部分Python 3.0的语法与函数。同时,Python还提供了Python 2到Python 3的Python文件转换功能,以帮助开发者升级。

2010年7月发布了Python 2.x系列的最后一个版本,主版本号为2.7。大量Python 3的特性被反向迁移到了Python 2.7,2.7版本比2.6版本进步很是多,同时拥有大量Python 3中的特性和库,而且照顾了原有的Python开发人群。Python2.7也是当前绝大多数Linux操做系统最新版本的默认Python版本。

从2008年开始,Python 2与Python 3是并存发展的。但在2018年3月,Guido在邮件列表上宣布Python 2.7将于2020年1月1日终止支持,这意味着以后Python 2将再也不被统一维护,与之对应的是主流第三方库也不会再提供针对Python 2版本的开发支持。Python 2的时代即将过去。

这一时期,Python继续以其独特魅力吸引更多的开发者加入,但真正让Python大放异彩的倒是AI(人工智能)的爆发。

AI并非一个新生事物,而是从20世纪50年代就开始出现,随后通过了大概20年的黄金时期,又分别在20世纪70年代和90年代两次进入寒冬期。从2006年开始,神经网络、深度学习的出现,让AI进入爆发期。

在AI领域,Python拥有不少相关库和框架。其中最著名的是:

  • sklearn:一个老牌机器学习库,其neural_network库可用来作神经网络训练。
  • PyTorch:由Facebook于2016年发布,它基于曾经很是流行的Torch框架而来,为深度学习的普及迈出了重要一步,到目前为止它已是人们用来作学术研究的首选方案。
  • TensorFlow:谷歌于2015年研发的第二代人工智能学习系统。借助谷歌的强大号召力以及在人工智能领域的技术实力,它已经成为目前企业真实生产环境中最流行的开源AI框架。更重要的是,它也是第一个(应该也是惟一一个)通过真实大规模生产环境(Google)检验过的框架。

在互联网领域,Facebook和Google都是全球IT企业的标杆,具有行业领导力和风向指示意义。他们基于Python开发的AI库(PyTorch和TensorFlow)已经成为目前最流行的AI库,并且“到底选择PyTorch仍是Tensorflow”仍然是一个具备争议性的话题。

在AI时代,主要应用场景包括:

  • 计算机视觉:经过特定的图片模式训练,让计算机理解图像中的物体甚至内容。在这一领域咱们熟悉的场景包括图像识别、目标识别和跟踪。例如人脸识别即是图像识别的典型领域,普遍应用到企业员工考勤、门店客户识别、机场等公共领域反恐识别等。2011年,吴恩达创立的谷歌大脑项目,可以在没有任何先验知识的状况下,仅仅经过观看无标注视频学习到识别高级别的概念就能知道哪一个是猫。
  • 语音识别:该过程是计算机将人类的天然语言识别并转换为文字的过程,普遍应用工业、家电、通讯、汽车电子、医疗、家庭服务、消费电子产品等各个领域。身边熟悉的场景例如经过语言对导航、APP、车载设备等作指令输入,以及电信客服系统中的语音业务查询和办理。
  • 天然语言理解:天然语言理解是一类任务的总称,而并不是是单一任务。它旨在让计算机理解人类的语言所表达的表层和深层含义。目前场见的应用场景包括自动问答系统、机器翻译、信息检索和过滤、信息抽取等。
  • 个性化推荐:个性化推荐是一个相对成熟的领域,但基于深度学习和神经网络,能够将大量的复杂、抽象特征的数据预处理工做最大程度的简化,甚至能够将海量特征通过简单处理后便直接丢到模型中便能得到比例理想的效果。
  • 游戏和竞技:在该领域,不少科技公司用通过训练后的AI与人类进行对弈。早在20世纪90年代,由IBM开发的“深蓝”与卡斯帕罗夫的世纪之战已经引发了世界的轰动;在2017年AlphaGo又击败排名世界围棋冠军柯洁,再一次让世人感觉到AI的强大威力。

在不一样的领域,Python都能扮演很是重要的角色,所以,在国外的各大榜单中,Python都已经成为最受欢迎的语言(或至少是之一)。不仅在商业领域流行,国内不少地区和教育机构正将Python归入教材之中。好比Python进入山东小学六年级的教材,浙江信息技术教材将放弃VB,改用Python 语言,Python列入全国计算机二级等级考试大纲等。

Python的将来发展

在Python发展过程当中,Guido一直是核心人物,甚至被称为“终身仁慈独裁者”,但在2018年经历了退出管理层风波以后,他又在2019年以五大指导委员之一的身份重回决策层。这为Python迎来了新的治理方案:指导委员会模式。这种模式意味着Python的将来将从Guido一人决定变为5人决定,虽然比不少开源语言仍然有民主化空间(例如PHP的改进由社区投票决定),但也算是一种从专制到民主的进步。

有关Python的每一个提高计划,都是在PEP(Python Enhancement Proposal)列表中——每一个版本新特性和变化都经过PEP提案通过社区决策层讨论、投票决议,最终才有咱们看到的功能。

目前,Python的最新稳定的主版本是3.7,Python 3.8也已经有了预览版,大概在2023年左右Python 4便会问世。在以后的时间里,Python会如何发展?咱们能够从Python软件基金会的董事会成员、CPython的核心开发人员Nick Coghlan的信息中略知一二:

首先,Python的PEP流程和制度没有任何变化,经过增长新模块和功能来加强的基础能力。随着Python 2在2020年再也不维护,社区在Python 3的资源和投入会相应增长。

其次,不一样解释器的实现和功能扩展还将继续加强,方向包括PyPy关于JIT编译器生成和软件事务内存的尝试,以及科学和数据分析社区,对面向数组编程的探索等。

再次,嵌入式应用的加强,核心是与其余虚拟机运行时(如JVM和CLR)的集成和改进,尤为是在教育领域取得的进展,可能会让Python做为更受欢迎的嵌入式脚本语言,在更大的应用程序中运行。

最后,对于为了兼容和维持Python 2的部分功能而存在于Python 3中的原有代码,在后续版本中应该会逐步优化甚至去掉。而对于其余更改,则会根据状况弃用、提出警告、逐步替代以及保留。

相关文章
相关标签/搜索