python开展前史
来源
python的作者,guido von rossum,荷兰人。1982年,guido从阿姆斯特丹大学获得了数学和核算机硕士学位。但是,虽然他算得上是一位数学家,但他愈加享用核算机带来的趣味。用他的话说,虽然具有数学和核算机双料资质,他总趋向于做核算机有关的作业,并热衷于做任何和编程有关的活儿。
在那个时分,guido触摸并运用过比方pascal、c、fortran等言语。这些言语的根本规划原则是让机器能更快运转。在80年代,虽然ibm和苹果现已掀起了个人电脑浪潮,但这些个人电脑的装备很低。比方前期的macintosh,只需8mhz的cpu主频和128kb的ram,一个大的数组就能占满内存。一切的编译器的中心是做优化,以便让程序能够运转。为了增进功率,言语也迫使程序员像核算机相同考虑,以便能写出更契合机器口味的程序。在那个年代,程序员恨不得用手剥削核算机每一寸的能力。有人乃至以为c言语的指针是在浪费内存。至于动态类型,内存主动办理,面向目标…… 别想了,那会让你的电脑陷入瘫痪。
这种编程方法让guido感到烦恼。guido知道怎么用c言语写出一个功用,但全部编写进程需求消耗许多的时刻,即便他现已精确的知道了怎么完结。他的另一个挑选是shell。bourne shell作为unix体系的解说器现已长期存在。unix的办理员们常常用shell去写一些简略的脚本,以进行一些体系保护的作业,比方定期备份、文件体系办理等等。shell能够像胶水相同,将unix下的许多功用衔接在一起。许多c言语下上百行的程序,在shell下只用几行就能够完结。但是,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
how to用于界说一个函数。一个python程序员应该很简略理解这段程序。abc言语运用冒号和缩进来表明程序块。行 尾没有分号。for和if构造中也没有括号() 。赋值选用的是put,而不是更常见的等号。这些改动让abc程序读起来像一段文字。 虽然现已具有了杰出的可读性和易用性,abc言语终究没有盛行起来。在其时,abc言语编译器需求对比高装备的电脑才干运转。而这些电脑的运用者一般精通核算机,他们更多考虑程序的功率,而非它的学习难度。除了硬件上的艰难外,abc言语的规划也存在一些丧命的疑问: 可拓宽性差。abc言语不是模块化言语。假如想在abc言语中增加功用,比方对图形化的支撑,就有必要改动许多当地。 不能直接进行io。abc言语不能直接操作文件体系。虽然你能够经过比方文本流的方法导入数据,但abc无法直接读写文 件。输入输出的艰难关于核算机言语来说是丧命的。你能想像一个打不开车门的跑车么? 过度改造。abc用自然言语的方法来表达程序的意义,比方上面程序中的how to 。但是关于程序员来说,他们更习气 用function或许define来界说一个函数。相同,程序员更习气用等号来分配变量。虽然abc言语很格外,但学习难度 也很大。 传达艰难。abc编译器很大,有必要被保存在磁带上。其时guido在拜访的时分,就有必要有一个大磁带来给他人装置abc编 译器。 这么,abc言语就很难敏捷传达。 1989年,为了打发圣诞节假日,guido开端写python言语的编译器。python这个姓名,来自guido所挚爱的电视剧monty python's flying circus。他期望这个新的叫做python的言语,能契合他的抱负:发明一种c和shell之间,功用全部,易学易用,可拓宽的言语。guido作为一个言语规划爱好者,现已有过规划言语的测验。这一次,也不过是一次朴实的hacking做法。
一门言语的诞生
1991年,第一个python编译器诞生。它是用c言语完结的,并能够调用c言语的库文件。从一出世,python现已具有了 :类,函数,异常处理,包括表和词典在内的中心数据类型,以及模块为根底的拓宽体系。 python语法许多来自c,但又遭到abc言语的激烈影响。来自abc言语的一些规则直到今日还赋有争议,比方强行缩进。 但这些语法规则让python简略读。另一方面,python聪明的挑选遵守一些常规,格外是c言语的常规,比方回归等号赋值。guido以为,假如“常识”上建立的东西,没有必要过度纠结。 python从一开端就格外介意可拓宽性。python能够在多个层次上拓宽。从高层上,你能够直接引进. py文件。在底层,你能够引证c言语的库。python程序员能够敏捷的运用python写. py文件作为拓宽模块。但当功用是考虑的首要因素时,python程序员能够深化底层,写c程序,编译为.so文件引进到python中运用。python就好像是运用钢构建房相同,先规则好大的结构。而程序员能够在此结构下适当自在的拓宽或更 改。 开端的python彻底由guido自个开发。python得到guido搭档的期待。他们敏捷的反馈运用定见,并参加到python的改善。guido和一些搭档构成python的中心团队。他们将自个大大都的业余时刻用于hack python。随后,python拓 展到研究所之外。python将许多机器层面上的细节躲藏,交给编译器处理,并凸显出逻辑层面的编程考虑。python程 序员能够花更多的时刻用于考虑程序的逻辑,而不是具体的完结细节。这一特征招引了广阔的程序员。python开端盛行。
时势造英雄
咱们不得不暂停咱们的python时刻,转而看一看瞬息万变的核算机职业。1990年代初,个人核算机开端进入一般家庭。intel发布了486处理器,windows发布window 3.0开端的一系列视窗体系。核算机的功用大大提高。程序员开端重视核算机的易用性,比方图形化界面。
windows 3.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保护了一个maillist,python用户就经过邮件进行沟通。python用户来自许多范畴,有不相同的布景,对python也有不相同的需求。python适当的敞开,又容 易拓宽,所以当用户不满意于现有功用,很简略对python进行拓宽或改造。随后,这些用户将改动发给guido,并由gu ido决定是不是将新的特征参加到python或许规范库中。假如代码能被归入python自身或许规范库,这将极大的荣誉。因为guido登峰造极的决定权,他因而被称为“终身的善良独裁者”。 python被称为“battery included”,是说它以及其规范库的功用强壮。这些是全部社区的贡献。python的开发者来自不相同范畴,他们将不相同范畴的长处带给python。比方python规范库中的正则表达是参阅perl,而lambda, map, filter, reduce等函数参阅了lisp。python自身的一些功用以及大大都的规范库来自于社区。python的社 区不断扩大,进而具有了自个的newsgroup,网站,以及基金。从python 2.0开端,python也从maillist的开发方法,转为彻底开源的开发方法。社区气氛现已形成,作业被全部社区分管,python也获得了愈加高速的开展。 到今日,python的结构现已建立。python言语以目标为中心安排代码,支撑多种编程范式,选用动态类型,主动进行内存回收。python支撑解说运转,并能调用c库进行拓宽。python有强壮的规范库。因为规范库的体系现已安稳,所以python的生态体系开端拓宽到第三方包。这些包,如django、web.py、wxpython、numpy、matplotlib、pil,将python晋级成了物种丰厚的热带雨林。
启示录
python崇尚美丽、明晰、简略,是一个优异并广泛运用的言语。python在tiobe排行榜中排行第八,它是google的第三大开发言语,dropbox的根底言语,豆瓣的效劳器言语。python的开展史能够作为一个代表,带给我许多启示。 在python的开发进程中,社区起到了首要的效果。guido自以为自个不是全能型的程序员,所以他只担任制定结构。假如疑问太杂乱,他会挑选绕过去,也即是cut the corner。这些疑问终究由社区中的别的人处理。社区中的人才是异常丰厚的,就连创建网站,筹措基金这么与开发稍远的作业,也有人乐意于处理。现在的项目开发越来越杂乱,越来越巨大,协作以及敞开的心态变成项目终究成功的要害。 python从别的言语中学到了许多,无论是现已进入前史的abc,仍是仍然在运用的c和perl,以及许多没有列出的别的 言语。能够说,python的成功代表了它一切学习的言语的成功。相同,ruby学习了python,它的成功也代表了python某些方面的成功。每个言语都是混合体,都有它优异的当地,但也有各式各样的缺陷。一起,一个言语“好与欠好”的评 判,通常受制于渠道、硬件、年代等等外部因素。程序员经历过许多言语之争。本来,以敞开的心态来承受各个言语,说不定哪一天,程序员也能够如guido那样,混合出自个的言语。
要害点常识
python的发音与拼写
python的意思是蟒蛇,源于作者喜欢的一部电视剧 (c呢?)
python的作者是guido van rossum(龟叔)
python是龟叔在1989年圣诞节期间,为了打发无聊的圣诞节而用c编写的一个编程言语
python正式诞生于1991年
python的解说器现在有多个言语完结,咱们常用的是cpython(官方版别的c言语完结),别的还有jython(能够运转在java渠道)、ironpython(能够运转在.net和mono渠道)、pypy(python完结的,支撑jit即时编译)
python现在有两个版别,python2和python3,最新版分别为2.7.12和3.5.2,现阶段大大都公司用的是python2
python优缺陷
长处
·
简略————python是一种代表简略主义思维的言语。阅览一个杰出的python程序就感受像是在读英语相同,虽然这个英语的请求非常严格!python的这种伪代码实质是它最大的长处之一。它使你能够专注于处理疑问而不是去搞理解言语自身。
易学————就好像你行将看到的相同,python极端简略上手。前面现已说到了,python有极端简略的语法。
免费、开源————python是floss(自在/敞开源码软件)之一。简略地说,你能够自在地发布这个软件的拷贝、阅览它的源代码、对它做改动、把它的一有些用于新的自在软件中。floss是根据一个团体分享常识的概念。这是为何python如此优异的因素之一——它是由一群期望看到一个愈加优异的python的人发明并经常改善着的。
高层言语————当你用python言语编写程序的时分,你无需考虑比方怎么办理你的程序运用的内存一类的底层细节。
可移植性————因为它的开源实质,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程序拷贝到别的一台核算�...