python由吉多·范罗苏姆(Guido van Rossum)在1989年创造。社区都称创始人为龟叔。1989年,龟叔在阿姆斯特丹为了打发圣诞节的无趣生活,开发了一个新的脚本解释程序,这便是python。1991年,第一个python编译器诞生,它是用C语言实现的,并能够调用C语言的库文件。因此,其很多语法和C相似。
对于众多的计算机语言,根据其特点和语法本身侧重点的不同,一般会有不同的分类和叫法。
拓展:python从一开始就特别在意可拓展新,可以在多个层次上拓展。从高层上,我们可以引入.py文件(python文件的后缀);从底层上,我们可以引入C语言的库。可以快速的使用.py文件作为拓展模块。当考虑性能时,可以深入底层,写C程序,编译为.so文件引入到python中使用。python就好像使用钢构建房一样,先规定好大的框架,而程序员在此框架下自由拓展。
由于计算机性能的提高,硬件不再是大多数应用的瓶颈,所以很多人使用语法规范简单的python。初期龟叔便维护了一个maillist,大家通过邮件进行交流。一般python使用者将修改或拓展后的内容发给龟叔,并由龟叔决定是否将新的特征加入到python或者其标准库中。因此,大家一般称其为“终身的仁慈独裁者”。
随着发展便有了python社区,并拥有了自己的newsgroup,网站(
http://www.python.org/
),及基金。通过社区,开发者们将不同领域的优点带给了python,如:python标准库的正则表达式参考的Perl,lambda、map、filter等函数参考的Lisp。从python2.0开始,开源社区开发模式,加速了python发展。直到今天,python的框架已确立。python语言以对象为核心组织代码,支持多种编程范式,采用动态类型,自动进行内存回收。
python作为计算机语言一般会被定义为四种语言:1、脚本语言,2、解释性语言,3、高级语言,4、面向对象的语言。
脚本:script。脚本就像电影的剧本一样,剧本决定了电影中的人和物的发展以及具体事务过程;计算机脚本决定了计算机上电后硬件初始化驱动、操作系统初始化加载以及接下来各种软件程序要做什么事,以及何时做。例如,Windows里的命令行文件或者.bat批处理文件等、linux的shell脚本等通过一个普通文本文件,并添加脚本命令或者代码并保存,就可以在有相关环境的操作系统中运行执行相应的操作了。一般脚本语言经过编译后就可以执行了。
编译型语言和脚本语言
**编译型语言:**就是用此语言将程序源代码编译成可执行程序(机器语言),然后就可以运行了。一般均通过编译语言将源代码和相应的库打包链接编译为最终的可执行文件。这种语言一般执行效率高(直接运行可执行程序)、依赖编译器、跨平台性能差些,如C、C++、Delphi等。
源代码->编译器编译为可执行程序->运行程序
**脚本语言:**脚本语言不需要编译器编译源代码,可以直接在操作系统的命令行中运行,当前环境本身就是此脚本的解释器。
源代码->直接运行
相对于脚本语言直接在操作环境中读一行解释一行执行一行,解释型语言一般需要专门的解释器来执行。每个语句也是在执行的时候才翻译为机器语言,依赖解释器,效率较低,但跨平台性能好。如java、python等。
高级语言相对于机器语言,是一种指令集的体系;不需要对硬件知识了解太多;是高度封装了的编程语言;并以人类日常语言为基础、并便于接收的文字(英语)来表示,具有较高的程序可读性。如Fortran、C、C++、JAVA、python等。
之所以称为高级语言,是因为刚开始发展的程序语言,如汇编语言,涉及太多物理层面上和硬件上的实现细节,不利于一般人去理解和学习并掌握,属于低级语言。20世纪80年代,东亚地区曾掀起一股常数开发用各自地方语言编写的高级语言,主要是改变BASIC或专用于数据库数据访问的语言,但随着编程人员的英语水平提高,现在有关开发很少。
目前主要使用的高级程序语言分两种:面向过程语言和面向对象语言。
**面向过程语言:**在早期的单片机开发中,由于存储极小(几K大小),一般只能实现很少的功能。因此一般均是源码顺序执行(顶多也就是中断)。由于程序量较小,所以不需抽象实际物理参数,即可编写并实现功能调用等。这种一般只有函数调用数据形式的处理程序属于面向过程语言。当需要修改时,一般需要寻找并修改一大堆数据,易于出错,非常不利于系统复杂化。后来随着硬件的发展,在单片机及嵌入式开发中,由于存储不再是瓶颈,大量的功能集成,需要运用面向对象语言来编写以实现各自复杂的实际实例。如C51等。
**面向对象语言:**是指在语言设计时,语言本身的基本元素是以对象的方式设计的,而不同的对象之间的交互则成为整个程序运行的主要表现形式。以万物皆对象的思路将现实中的物体、概念、逻辑的整体等内容实现与语言元素意义对应。由于程序员用此方式设计程序时更直观和理解,更易建华处理逻辑,因此降低了用语言解决实际问题的负责度,提高了处理事情的效率。
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、PalmOS、QNX、VMS、Psion、AcomRISCOS、VxWorks、PlayStation、SharpZaurus、WindowsCE甚⾄还有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由于历史较短,构架开发的相对集中。RubyonRails构架开发中⼩型web程序天下⽆敌)。不过这也从另⼀个侧⾯说明,python⽐较优秀,吸引的⼈才多,项⽬也多。
python不能像汇编语言那样直接去操作底层的硬件,尤其是那些汇编语言可以直接操作的寄存器级别的硬件。但是C语言可以。
目前主要应用于web应用开发、操作系统管理和服务器运维的自动化脚本、科学计算、桌面软件、服务器网络软件、游戏以及构思实现和产品早期原型迭代等。
网络框架:Django、TurboGears、Pylons、异步网络编程框架Twisted、flask、Webpy、Bottle
内容管理系统:Plone、Mezzanine
应用服务器:Zope
python网站:社交分享类:Reddit;文件分享类:Dropbox;图书唱片电影等资料数据库网站:豆瓣;MediaWiki的机器人程序:Python Wikipedia Robot Framework;Wiki程序:MoinMoinWiki;图片社交分享网站:Pinterest;幻灯片存储显示分享网站:SlidShare;其他各种网站:知乎、果壳网、美团、快盘、扇贝网、糗事百科、Wopus问答等。
其他:编写CGI脚本;支持HTML和XML的处理;邮件处理:Mailman;RSS处理;支持很多网络协议。
自定义和ODBC数据库接口:MySQL、Oracle、MS SQL Server、PostgreSQL、SybODBC等。
标准数据库接口:
对象数据库接口:ZODB、Durus
内置Tk的GUI库、wxWidgets、GTK+、通过pygt或pyside支持QT、通过win32支持MFC、Delphi、wxPython、AnyGui等。
Bioinformatics、Physics、NumPy、SciPy、Matplotlib、Pandas等。
Education Special Interest Group、pyBiblio、Software Carpentry Course等
编译控制:SCons
自动化连续编译和测试: Buildbot、Apache Gump
缺陷追踪和项目管理:Roundup、Trac
游戏框架:PyGame、PyKytra等
3D渲染库:FreeCAD、Minilight
3D软件:以C与Python开发的开源3D绘图软件:Blender、Cinema 4D
python游戏库:PySoy、Pyglet、Python-Ogre、Panda3D、Blender3D、GGZ Gaming Zone等
python游戏:EVE、SolarWolf、Mount&Blade等
python在线游戏服务器:Evennia、GrailMUD等。
YouTube、Google、Yahoo!、NASA都在内部⼤量地使⽤Python
相比于其他语言,我们个人一般可以利用python进行小型的3D效果实现、网络下载器的实现;还有网络爬虫抓取数据、数据计算和数据分析等。