1. 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 Pythons Flying Circus。他
期盼这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。Guido
做为一个语言设计
兴趣者,
已然有过设计语言的尝试。这一次,
亦不外是一次纯粹的hacking
行径。一门语言的诞生1991年,
第1个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
时势造英雄
咱们不得不暂停咱们的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,现
周期大部分
机构用的是Python2Life is shot, you need Python. 人生苦短,我用Python。2018年 编程语言流行排行榜
2. 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程序拷贝到
另一一台计算机上,它就
能够工作了,这
亦使得你的Python程序更加易于移植。面向对象————Python既支持面向过程的编程
亦支持面向对象的编程。在“面向过程”的语言中,程序
是由于过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序
是由于数据和功能组合而成的对象构建起来的。与其他
重点的语言如C++和Java相比,Python以一种非常强大又简单的方式实现面向对象编程。可扩展性————
倘若你
必须你的一段关键代码运行得更快
或期盼某些算法不公开,你
能够把你的部分程序用C或C++编写,
而后在你的Python程序中
运用它们。丰富的库————Python标准库确实很庞大。它
能够帮忙你处理
各样工作,
包含正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、
秘码系统、GUI(图形用户界面)、Tk和其他与系统
相关的操作。记住,只要安装了Python,所有这些功能都是可用的。这被
叫作作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。规范的代码————Python采用强制缩进的方式使得代码
拥有极佳的可读性。
缺点
运行速度,有速度
需求的话,用C++改写关键部分吧。国内市场较小(国内以python来做
重点研发的,
日前仅有有些web2.0
机构)。但时间推移,
日前非常多国内软件
机构,尤其是游戏
机构,
亦起始规模
运用他。中文资料匮乏(好的python中文资料屈指可数)。托社区的福,有几本优秀的教材
已然被翻译了,但入门级教材多,高级内容还是只能看英语版。构架
选取太多(
无像C#
这般的官方.net构架,
亦无像ruby
因为历史较短,构架
研发的相对集中。Ruby on Rails 构架
研发中小型web程序天下无敌)。
不外这
亦从另一个侧面说明,python比较优秀,吸引的人才多,项目
亦多。
3. Python应用场景
Web应用研发Python经常被用于Web
研发。
例如,
经过mod_wsgi模块,Apache
能够运行用Python编写的Web程序。Python定义了WSGI标准应用接口来协调Http服务器与基于Python的Web程序之间的通信。
有些Web框架,如Django,TurboGears,web2py,Zope等,
能够让程序员
容易地
研发和管理
繁杂的Web程序。
操作系统管理、服务器运维的自动化脚本在
非常多操作系统里,Python是标准的系统组件。 大
都数Linux发行版以及NetBSD、OpenBSD和Mac OS X都集
成为了Python,
能够在终端下直接运行Python。有
有些Linux发行版的安装器
运用Python语言编写,
例如Ubuntu的Ubiquity安装器,Red Hat Linux和Fedora的Anaconda安装器。Gentoo Linux
运用Python来编写它的Portage包管理系统。Python标准库
包括了多个调用操作系统功能的库。
经过pywin32这个第三方软件 包,Python能够
拜访Windows的COM服务及其它Windows API。
运用IronPython,Python程序能够直接调用.Net Framework。
通常说来,Python编写的系统管理脚本在可读性、性能、代码重用度、扩展性几方面都优于普通的shell脚本。
科学计算NumPy,SciPy,Matplotlib
能够让Python程序员编写科学计算程序。
桌面软件PyQt、PySide、wxPython、PyGTK是Python快速
研发桌面应用程序的利器。
服务器软件(网络软件)Python
针对各样网络协议的支持很完善,
因此呢经常被用于编写服务器软件、网络爬虫。第三方库Twisted支持异步网络编程和
都数标准的网络协议(
包括客户端和服务器),并且
供给了多种工具,被广泛用于编写高性能的服务器软件。
游戏非常多游戏
运用C++编写图形
表示等高性能模块,而
运用Python
或Lua编写游戏的
规律、服务器。相较于Python,Lua的功能更简单、体积更小;而Python则支持
更加多的特性和数据类型。
构思实现,制品初期原型和迭代YouTube、Google、Yahoo!、NASA都在内部
海量地
运用Python。