人生苦短,我用Python | Python简史

点击蓝字关注嘉为科技python


2017年,根据 IEEE Spectrum 发布的研究报告显示,Python成为世界上最受欢迎的语言,C 和 Java 分别位居第二和第三位。linux



做为近几年最火的编程语言Python,甚至攻陷了教育界。android


2017年10月11日,教育部考试中心发布了“关于全国计算机等级考试(NCRE)体系调整”的通知,决定自2018年3月起,在计算机二级考试中加入 “Python语言程序设计”科目。程序员


另外,Python也将取代VB,被归入浙江省高考内容,山东省在其2017年秋季正式出版的《小学信息技术》,也大幅度引入了 Scratch、Python 等编程语言。web



近两年日新月异的Python,其实历史悠久,是和Java同时代的语言,开源已有20多年。
正则表达式


01算法

Python的起源shell

Python的做者是Guido von Rossum(吉多·范罗苏姆),荷兰人,1982年得到阿姆斯特丹大学的数学和计算机科学的硕士学位。数据库


Guido von Rossumexpress


在开发Python以前,Guido von Rossum在CWI(Centrum voor Wiskunde en Informatica,国家数学和计算机科学研究院)参与到ABC语言的开发。ABC是一种教学语言,是专门为非专业程序员设计的,目标是“让用户感受更好”。ABC语言但愿让编程语言变得容易阅读,容易使用,容易记忆,容易学习,并以此来激发人们学习编程的兴趣。

 

好比下面是一段来自Wikipedia的ABC程序,这个程序用于统计文本中出现的词(word)的总数:


HOW TO RETURN words document:

   PUT {} IN collection

   FOR line IN document:

      FOR word IN split line:

         IF word not.in collection:

            INSERT word IN collection

   RETURN collection

上面的函数读起来就像一段天然的文字。


一个Python程序员应该很容易理解这段程序。HOW TO用于定义一个函数,ABC语言使用冒号(:)和缩进来表示程序块(C语言使用{}来表示程序块),行尾没有分号,for和if结构中也没有括号()。若是将HOW TO改成def,将PUT行改成collection = [],将INSERT行改成collection.append(word),这就几乎是一个标准的Python函数。

 

尽管已经具有了良好的可读性和易用性,ABC语言最终没有流行起来。

 

一方面,ABC语言编译器须要配置比较高的电脑才能运行,而80年代的硬件配置很是低(在今天看来),早期的Macintosh只有8MHz的CPU主频和128KB的RAM,一个大的数组就能占满内存,至于动态类型、面向对象等等,只能让电脑陷入瘫痪。

 

另外,除了硬件上的困难,ABC语言自己也存在一些致命问题:好比可扩展性差、不能直接进行IO、过渡革新增大了程序员的学习难度、编译器很大致使传播困难等。


IBM tape drive:读写磁带


1989年,为了打发无聊的圣诞节假期,Guido开始开发一种新的脚本解释语言-Python,命名源自一部他热爱的英国喜剧《蒙提·派森的飞行马戏团》(Monty Python and the Flying Circus)。


02

Python的发展

1991年,第一个Python编译器(同时也是解释器)诞生。Python是从ABC发展起来的,主要受到了Modula-3(另外一种至关优美且强大的语言,为小型团体所设计的)的影响,而且结合了Unix shell和C的习惯。

 

Guido认为ABC语言没有成功的缘由,是由于ABC没有开源,因此在Python上就特别重视开源和与其它语言的结合。


它常被昵称为胶水语言,可以把用其余语言制做的各类模块(尤为是C/C++)很轻松地联结在一块儿。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),而后对其中有特别要求的部分,用更合适的语言改写,好比3D游戏中的图形渲染模块,性能要求特别高,就能够用C/C++重写,然后封装为Python能够调用的扩展类库。


最初的Python logo:

由Guido的兄弟Just von Rossum设计


最初的Python彻底由Guido本人开发,得到了Guido同事们的热烈欢迎,他们反馈使用意见,并参与到Python的改进中去。Guido和一些同事构成Python的核心团队,将本身大部分的业余时间用于hack Python,随后扩展到CWI以外。

 

而这段时期,正处在计算机行业迅猛发展的90年代,我的计算机开始大量普及,进入普通家庭,计算机的性能也大大提到。硬件厂商开始渴求软件的出现,以带动硬件的更新换代,C++和Java也相继流行,语言的易用性被提到了一个新的高度。


图形化界面


同时,Internet也在悄然发生着变化。


1992年,Internet上的主机超过1百万台。1993年,Internet主干网的速率提升到45Mbps。1999年MCI和WorldCom公司将美国的Internet主干网速率提升到2.5Gbps,Internet上注册的主机超过1千万台。


WWW的站点数目也急剧增加,1993年末只有627个,而1999年末则超过了950万个,上网用户数则超过2亿。

 

Internet上提供了高级浏览WWW服务、电子邮件E-mail 服务等,许多程序员以及资深计算机用户频繁使用Internet进行交流 (包括email和newsgroup)。Internet让信息交流成本大大降低,一种新的软件开发模式开始流行:开源 (open source)。程序员利用业余时间进行软件开发,并开放源代码。1991年,Linus在comp.os.minix新闻组上发布了Linux内核源代码,吸引大批hacker的加入。Linux和GNU相互合做,最终构成了一个充满活力的开源平台。

 

没有硬件性能的瓶颈,Python又简单易用,许多程序员开始将目光转向Python。


Python将许多机器层面上的细节隐藏,交给编译器处理,并凸显出逻辑层面的编程思考。Python程序员能够花更多的时间用于思考程序的逻辑,而不是具体的实现细节 (Guido有一件T恤,写着:人生苦短,我用Python)。这一特征吸引了广大的程序员。Python开始流行。



Guido维护了一个maillist,Python用户就经过邮件进行交流。Python用户来自许多领域,有不一样的背景,对Python也有不一样的需求。Python至关的开放,又容易拓展,因此当用户不知足于现有功能,就能够很容易的对Python进行拓展或改造。随后,这些用户将改动发给Guido,并由Guido决定是否将新的特征加入到Python或者标准库中。若是代码能被归入Python自身或者标准库,这将极大的荣誉。Python自身也所以变得更好。


Guido不得不做出许多决定,这也是他被称为Benevolent Dictator For Life的缘由。

 

Python被称为“Battery Included”,是说它以及其标准库的功能强大。这些是整个社区的贡献。Python的开发者来自不一样领域,他们将不一样领域的优势带给Python。


好比Python标准库中的正则表达(regular expression)是参考Perl,而lambda, map, filter, reduce函数参考Lisp。Python自己的一些功能以及大部分的标准库来自于社区。Python的社区不断扩大,进而拥有了本身的newsgroup,网站(python.org),以及基金 (Python Software Foundation)。从Python 2.0开始,Python也从maillist的开发方式,转为彻底开源的开发方式。社区气氛已经造成,工做被整个社区分担,Python也得到了更加高速的发展。

 

因为Guido享有绝对的仲裁权,因此在Python早期maillist的开发时代,很多爱好者至关担忧Guido的生命。他们甚至做出假设:若是Guido挂了的话,Python会怎样。感兴趣的能够搜索文章:If Guido was hit by a bus。

 

到今天,Python的框架已经确立。


Python语言以对象为核心组织代码(Everything is object),支持多种编程范式(multi-paradigm),采用动态类型(dynamic typing),自动进行内存回收(garbage collection)。Python支持解释运行(interpret),并能调用C库进行拓展。


Python有强大的标准库 (battery included)。因为标准库的体系已经稳定,因此Python的生态系统开始拓展到第三方包。这些包,如Django, web.py, wxpython, numpy, matplotlib,PIL,将Python升级成了物种丰富的热带雨林。


03

Python版本迭代历史

  • 1994年01月,Python 1.0,增长了 lambda, map, filter and reduce;

  • 2000年10月16日,Python 2.0,加入了内存回收机制,构成了如今Python语言框架的基础;

  • 2004年11月30日,Python 2.4,同年目前最流行的WEB框架Django 诞生;

  • 2006年09月19日,Python 2.5;

  • 2008年10月01日,Python 2.6;

  • 2008年12月03日,Python 3.0;

  • 2009年06月27日,Python 3.1;

  • 2010年07月03日,Python 2.7;

  • 2011年02月20日,Python 3.2;

  • 2012年09月29日,Python 3.3;

  • 2014年03月16日,Python 3.4;

  • 2015年09月13日,Python 3.5;

  • 2016年12月23日,Python 3.6;

  • 2018年03月10日,正式宣布Python 2.7 的 EOL(停用)日期是 2020 年 1 月 1 日,接下来,将不会有任何更新,也不会再有源码安全补丁;

  • 2018年06月27日,Python 3.7。


04

Python的设计定位

Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,而且被大量用户所欢迎的、用途普遍的语言。


Python的设计哲学是“优雅”、“明确”、“简单”。所以,Perl语言中“老是有多种方法来作同一件事”的理念在Python开发者中一般是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来作一件事”。在设计Python语言时,若是面临多种选择,Python开发者通常会拒绝花俏的语法,而选择明确的没有或者不多有歧义的语法。因为这种设计观念的差别,Python源代码一般被认为比Perl具有更好的可读性,而且可以支撑大规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this能够得到完整的列表。


Python开发人员尽可能避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁一般不会被合并到Python内。因此不少人认为Python很慢。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的状况,Python设计师倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。可用的JIT技术是PyPy。


Python是彻底面向对象的语言。函数、模块、数字、字符串都是对象,而且彻底支持继承、重载、派生、多继承,有益于加强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。


虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也普遍地使用它。Python的支持者较喜欢称它为一种高级动态编程语言,缘由是“脚本语言”泛指仅做简单程序设计任务的语言,如shellscript、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。


Python自己被设计为可扩充的。并不是全部的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员可以轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器自己也能够被集成到其它须要脚本语言的程序内。所以,不少人还把Python做为一种“胶水语言”(glue language)使用。使用Python将其余语言编写的程序进行集成和封装。


在Google内部的不少项目,例如Google Engine使用C++编写性能要求极高的部分,而后用Python或Java/Go调用相应的模块。《Python技术手册》的做者马特利(Alex Martelli)说:“这很难讲,不过,2004 年,Python 已在Google 内部使用,Google 召募许多 Python 高手,但在这以前就已决定使用Python,他们的目的是 Python where we can, C++ where we must,在操控硬件的场合使用 C++,在快速开发时候使用 Python。”


05

Python的优势和缺点

优势

简单:Python是一种表明简单主义思想的语言。阅读一个良好的Python程序就感受像是在读英语同样。它使你可以专一于解决问题而不是去搞明白语言自己。


易学:Python极其容易上手,由于Python有极其简单的说明文档 。


速度快:Python 的底层是用 C 语言写的,不少标准库和第三方库也都是用 C 写的,运行速度很是快。 


免费、开源:Python是FLOSS(自由/开放源码软件)之一。使用者能够自由地发布这个软件的拷贝、阅读它的源代码、对它作改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。


高层语言:用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。


可移植性:因为它的开源本质,Python已经被移植在许多平台上(通过改动使它可以工做在不一样平台上)。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/二、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux开发的android平台。


解释性:一个用编译性语言好比C或C++写的程序能够从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程经过编译器和不一样的标记、选项完成。


运行程序的时候,链接/转载器软件把你的程序从硬盘复制到内存中而且运行。而Python语言写的程序不须要编译成二进制代码。你能够直接从源代码运行 程序。


在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,而后再把它翻译成计算机使用的机器语言并运行。这使得使用Python更加简单。也使得Python程序更加易于移植。


面向对象:Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。


可扩展性:若是须要一段关键代码运行得更快或者但愿某些算法不公开,能够部分程序用C或C++编写,而后在Python程序中使用它们。


可嵌入性:能够把Python嵌入C/C++程序,从而向程序用户提供脚本功能。


丰富的库:Python标准库确实很庞大。它能够帮助处理各类工做,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其余与系统有关的操做。这被称做Python的“功能齐全”理念。除了标准库之外,还有许多其余高质量的库,如wxPython、Twisted和Python图像库等等。


规范的代码:Python采用强制缩进的方式使得代码具备较好可读性。而Python语言写的程序不须要编译成二进制代码。


缺点

单行语句和命令行输出问题

不少时候不能将程序连写成一行,如import sys;for i in sys.path:print i。而perl和awk就无此限制,能够较为方便的在shell下完成简单程序,不须要如Python同样,必须将程序写入一个.py文件。


独特的语法

这也许不该该被称为局限,可是它用缩进来区分语句关系的方式仍是给不少初学者带来了困惑。即使是颇有经验的Python程序员,也可能陷入陷阱当中。


运行速度慢

这里是指与C和C++相比。


06

Python的应用

系统编程:提供API(Application Programming Interface应用程序编程接口),能方便进行系统维护和管理,Linux下标志性语言之一,是不少系统管理员理想的编程工具。


图形处理:有PIL、Tkinter等图形库支持,能方便进行图形处理。


数学处理:NumPy扩展提供大量与许多标准数学库的接口。


文本处理:python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。


数据库编程:程序员可经过遵循Python DB-API(数据库应用程序编程接口)规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据库通讯。python自带有一个Gadfly模块,提供了一个完整的SQL环境。


网络编程:提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。不少大规模软件开发计划例如Zope,Mnet 及BitTorrent. Google都在普遍地使用它。


Web编程:应用的开发语言,支持最新的XML技术。


多媒体应用:Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。


pymo引擎:PYMO全称为python memories off,是一款运行于Symbian S60V3,Symbian3,S60V5, Symbian3, Android系统上的AVG游戏引擎。因其基于python2.0平台开发,而且适用于建立秋之回忆(memories off)风格的AVG游戏,故命名为PYMO。


黑客编程:python有一个hack的库,内置了你熟悉的或不熟悉的函数,可是缺乏成就感。


爬虫:这两年特别是网络爬虫火得一塌糊涂,10个写爬虫的9个在用Python。


07

Python的将来

著名数据科学网站 KDnuggets 发布了 2018 年数据科学和机器学习工具调查结果,数据显示,Python 做为机器学习经常使用的编程语言正在不断扩大领先优点,2017 年 Python 的使用率超过 50%,今年它的使用率上升至 66%,而 R 的使用率首次下跌,跌破 50%。



将来将是大数据和人工智能的时代,Python 对数据的处理,有着得天独厚的优点,人工智能、机器学习的首选语言就是Python。

 

咱们有理由相信,Python 会愈来愈火。


本文汇编自网络。

参考文章:

  • 做者:Vamei ,《Python简史》,原文连接:

    http://www.cnblogs.com/vamei

  • 做者:Mr丶Ding,《Python简介、发展历史及特色》,原文连接:

    https://blog.csdn.net/MrDing991124/article/details/78536295

  • 《2018年数据科学语言&工具排名,Python完胜R语言


关于咱们


嘉为科技 —— IT解决方案与服务领先者,腾讯蓝鲸智云全国首家受权技术合做伙伴,拥有嘉维蓝鲸IT自动化运维、IT基础架构服务、应用软件开发、云计算四大系列业务,提供自本地到云端、从标准架构到定制开发的一系列优秀IT解决方案和服务,全新打造嘉维蓝鲸IT自动化运维解决方案、CMDB解决方案、DevOps解决方案等,提高客户信息化水平和市场竞争力,助力客户的业务发展。

嘉为集团 —— 成立于2001年,由嘉为科技和嘉为教育组成,于广州、深圳、北京、上海设有分公司,融IT服务和培训咨询于一体,为客户提供解决方案、运维支持、软件研发及培训教育服务。历经18年的发展和积累,嘉为已成为备受客户赞誉的行业翘楚。


长按识别二维码关注咱们


本文分享自微信公众号 - 嘉为科技(canway_service)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。