前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >人生苦短,我用Python | Python简史

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

作者头像
嘉为蓝鲸
发布2018-12-21 11:12:30
1.5K0
发布2018-12-21 11:12:30
举报

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

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

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

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

近两年突飞猛进的Python,其实历史悠久,是和Java同时代的语言,开源已有20多年。

01

Python的起源

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

Guido von Rossum

在开发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/2、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语言》
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嘉为科技 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档