目录
written by 晴天小雨
文中涉及的内容若侵权,请联系本文作者删除!
前言
Python诞生于1991年,从一开始的被冷待到被推上了风口浪尖,足足花了27年的时间,根据2018年7月份的TIOBE的语言排名榜显示,Python已跃居第4位,也可见其如今的地位日益凸显。
TIOBE Index for July 2018
Jul 2018 | Jul 2017 | Change | Programming Language | Ratings | Change |
---|---|---|---|---|---|
1 | 1 | Java | 16.139% | +2.37% | |
2 | 2 | C | 14.662% | +7.34% | |
3 | 3 | C++ | 7.615% | +2.04% | |
4 | 4 | Python | 6.361% | +2.82% | |
5 | 7 | change | Visual Basic .NET | 4.247% | +1.20% |
6 | 5 | change | C# | 3.795% | +0.28% |
7 | 6 | change | PHP | 2.832% | -0.26% |
8 | 8 | JavaScript | 2.831% | +0.22% | |
9 | - | change | SQL | 2.334% | +2.33% |
10 | 18 | change | Objective-C | 1.453% | -0.44% |
如果你不知道Python的一些起源,你就不知道为什么Python那么简单易学但又困难重重?如果你不知道Python的一些历史,你就不知道为什么Python会那么火,以及为什么会成为科学计算和人工智能的推荐语言。
无论学习什么语言,个人认为,了解它的起源和历史,可以很好地帮助我们了解语言规则和设计的最初灵感,可以了解作者的初衷以及为什么要那样去设计等等。
今天,请跟随我的脚步,引你进入Python的世界,那是一个很奇妙的魔法般的世界。
作者简介
英文名 | Guido van Rossum |
---|---|
中文外号 | 龟叔 |
国 籍 | 荷兰 |
出生地 | 荷兰 |
出生日期 | 1956-01-31 |
毕业院校 | 阿姆斯特丹大学 |
学历 | 数学和计算机硕士学位 |
主要成就 | 发明 Python 语言 |
任职公司 | DropBox |
擅长语言 | Pascal、C、Fortran、shell、ABC、Python等 |
Python诞生背景
在80年代,电脑的配置很低。
比如早期的Macintosh,只有8MHz的CPU主频和128KB的RAM,一个大的数组就能占满内存。所有的编译器的核心是做优化,以便让程序能够运行。在那个时代,程序员恨不得用手榨取计算机每一寸的能力。有人甚至认为C语言的指针是在浪费内存。至于动态类型,内存自动管理,面向对象……别想了,那会让你的电脑陷入瘫痪。
这种编程方式让Guido感到苦恼。
Guido知道如何用C语言写出一个功能,但整个编写过程需要耗费大量的时间,即使他已经对如何实现了如指掌。
偶然的机会,Guido接触到shell,发现shell可以像胶水一样,将UNIX下的许多功能连接在一起。许多C语言下上百行的程序,在shell下只用几行就可以完成。然而,shell的本质是调用命令,最致命的是shell没有数值型的数据类型,加法运算都可以变得复杂,更别谈全面调用计算机的功能。
于是,Guido又花了一段时间去查找和研究,会不会有一种语言,像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样,可以轻松的编程?
ABC语言让Guido看到希望
ABC是由荷兰的数学和计算机研究所开发的。Guido在该研究所工作,并参与到ABC语言的开发。ABC语言以教学为目的。与当时的大部分语言不同,ABC语言的目标是“让用户感觉更好”。ABC语言希望让语言变得容易阅读,容易使用,容易记忆,容易学习,并以此来激发人们学习编程的兴趣。比如下面是一段来自Wikipedia的ABC程序,这个程序用于统计文本中出现的词的总数:
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
ABC语言使用HOW TO用于定义一个函数。
冒号和缩进来表示程序块
行尾没有分号
for和if结构中也没有括号()
赋值采用的是PUT,而不是更常见的等号
(是不是很像Python?)
但因当时ABC语言编译器保存困难、对电脑的配置比较高、扩展性差且无法输入和输出,最终没有流行起来,尽管已经具备了良好的可读性和易用性。
1989年的圣诞节
1989年,为了打发圣诞节假期,Guido开始写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。
1991年,Python诞生了
1991年,第一个Python编译器诞生。
它是用C语言实现的,并能够调用C语言的库文件。从一出生,Python已经具有了:类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓展系统。
Python语法很多来自C,但又受到ABC语言的强烈影响。
来自ABC语言的一些规定直到今天还富有争议,比如强制缩进。但这些语法规定让Python容易读。
另一方面,Python聪明的选择服从一些惯例,特别是C语言的惯例,比如回归等号赋值。
Guido认为,如果“常识”上确立的东西,没有必要过度纠结。
Python从一开始就特别在意可拓展性。
Python可以在多个层次上拓展。从高层上,你可以直接引入.py文件。在底层,你可以引用C语言的库。
最初的Python完全由Guido本人开发。
Python得到Guido同事的欢迎。他们迅速的反馈使用意见,并参与到Python的改进。Guido和一些同事构成
Python的核心团队。
他们将自己大部分的业余时间用于hack Python。随后,Python拓展到研究所之外。Python将许多机器层面上的细节隐藏,交给编译器处理,并凸显出逻辑层面的编程思考。Python程序员可以花更多的时间用于思考程序的逻辑,而不是具体的实现细节。这一特征吸引了广大的程序员。Python开始流行。
时势造英雄
硬件提升
1990年代初,个人计算机开始进入普通家庭。Intel发布了486处理器,windows发布window3.0开始的一系列视窗系统。计算机的性能大大提高。程序员开始关注计算机的易用性,比如图形化界面。C++和Java相继流行。C++和Java提供了面向对象的编程范式,以及丰富的对象库。在牺牲了一定的性能的代价下,C++和Java大大提高了程序的产量。语言的易用性被提到一个新的高度。ABC失败的一个重要原因是硬件的性能限制。从这方面说,Python要比ABC幸运许多。
Internet萌芽
1990年代还是个人电脑的时代,windows和Intel挟PC以令天下,盛极一时。尽管Internet为主体的信息革命尚未到来,但许多程序员以及资深计算机用户已经在频繁使用Internet进行交流,比如使用email和newsgroup。Internet让信息交流成本大大下降。一种新的软件开发模式开始流行:开源。程序员利用业余时间进行软件开发,并开放源代码。
开源
1991年,Linus在comp.os.minix新闻组上发布了Linux内核源代码,吸引大批hacker的加入。Linux和GNU相互合作,最终构成了一个充满活力的开源平台。Python相当的开放,又容易拓展,所以当用户不满足于现有功能,很容易对Python进行拓展或改造。随后,这些用户将改动发给Guido,并由Guido决定是否将新的特征加入到Python或者标准库中。如果代码能被纳入Python自身或者标准库,这将是极大的荣誉。由于Guido至高无上的决定权,他因此被称为“终身的仁慈独裁者”。Python被称为“Battery Included”,是说它以及其标准库的功能强大。
这些是整个社区的贡献。
Python的开发者来自不同领域,他们将不同领域的优点带给Python。
比如Python标准库中的正则表达是参考Perl,而lambda,map,filter,reduce等函数参考了Lisp。Python本身的一些功能以及大部分的标准库来自于社区。Python的社区不断扩大,进而拥有了自己的newsgroup,网站,以及基金。从Python2.0开始,Python也从maillist的开发方式,转为完全开源的开发方式。社区气氛已经形成,工作被整个社区分担,Python也获得了更加高速的发展。
到今天,Python的框架已经确立。
Python语言以对象为核心组织代码,支持多种编程范式,采用动态类型,自动进行内存回收。Python支持解释运行,并能调用C库进行拓展。Python有强大的标准库。由于标准库的体系已经稳定,所以Python的生态系统开始拓展到第三方包。这些包,如Django、web.py、wxpython、numpy、matplotlib、PIL,将Python升级成了物种丰富的热带雨林。
启示
Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。
Python从其他语言中学到了很多,无论是已经进入历史的ABC,还是依然在使用的C和Perl,以及许多没有列出的其他语言。可以说,Python的成功代表了它所有借鉴的语言的成功。同样,Ruby借鉴了Python,它的成功也代表了Python某些方面的成功。每个语言都是混合体,都有它优秀的地方,但也有各种各样的缺陷。同时,一个语言“好与不好”的评判,往往受制于平台、硬件、时代等等外部原因。程序员经历过许多语言之争。其实,以开放的心态来接受各个语言,说不定哪一天,你也可以像Guido那样,混合出自己的语言。
小结
- Python的第一个字母大写(如果你写成python,别人一看就知道你不是专业的)。
Python的意思是蟒蛇,源于作者喜欢的一部电视剧(Monty
Python’s Flying Circus)。 • Python的作者是Guido van Rossum(龟叔)。由于Guido至高无上的决定权,Guido被称为“终身的仁慈独裁者”。
- Python被称为“Battery Included”,是说它以及其标准库的功能强大。
- Python是龟叔在1989年圣诞节期间,为了打发无聊的圣诞节而用C编写的一个编程语言。
- Python正式诞生于1991年。
- Python的解释器如今有多个语言实现,常用的是CPython(官方版本的C语言实现),其他还有Jython(可以运行在Java平台)、IronPython(可以运行在.NET和Mono平台)、PyPy(Python实现的,支持JIT即时编译)。
- Python目前有两个版本,Python2和Python3,最新版分别为2.7.x和3.7.x,现阶段大部分公司用的是Python2。
- Life is shot, you need Python.人生苦短,我用Python。
- 2018年7月份TIOBE编程语言流行排行榜,Python位居第4位。