Python

Python

求助编辑百科名片

Python_第1张图片   
Python logo

Python(KK 英语发音:/'paɪθɑn/, DJ 英语发音:/ˈpaiθən/)是一种面向对象、直译式计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。Python语法简捷而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,速度要求非常高,就可以用C++重写。

目录

产生
风格
设计哲学与定位
执行
优点
局限
应用
展开
产生
风格
设计哲学与定位
执行
优点
局限
应用
展开

编辑本段产生

  Python的创始人为 Guido van Rossum。1989年圣诞节期间,在 阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本 解释程序,做为ABC 语言的一种继承。之所以选中Python(大 蟒蛇的意思)作为程序的名字,是因为他是一个叫 Monty Python的喜剧团体的爱好者。
Python_第2张图片

  标识

  ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido 认为是非开放造成的。Guido 决心在Python 中避免这一错误。同时,他还想实现在ABC 中闪现过但未曾实现的东西。
  就这样,Python在Guido手中诞生了。实际上,第一个实现是在Mac机上。可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix shell和C的习惯。

编辑本段风格

  Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。
  设计者开发时总的指导思想是,对于一个特定的问题,只要有一种最好的方法来解决就好了。这在由Tim Peters写的python格言(称为The Zen of Python)里面表述为:There should be one-- and preferably only one --obvious way to do it. 这正好和Perl语言(另一种功能类似的高级 动态语言)的中心思想TMTOWTDI(There's More Than One Way To Do It)完全相反。 
  Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。其中很重要的一项就是Python的缩进规则。
  一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而C语言是用一对花括号{}来明确的定出模块的边界的,与字符的位置毫无关系)。这一点曾经引起过争议。因为自从C这类的语言诞生后,语言的语法含义与字符的排列方式分离开来,曾经被认为是一种程序语言的进步。不过不可否认的是,通过强制程序员们 缩进(包括if,for和函数定义等所有需要使用模块的地方),Python确实使得程序更加清晰和美观。

编辑本段设计哲学与定位

  Python的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法。由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this可以获得完整的列表。
  Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。所以很多人认为Python很慢。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python设计师倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。目前可用的JIT技术是PyPy。
  Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符,因此Python也支持泛型设计。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。
  虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。Python的支持者较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shell script、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。”

编辑本段执行

  Python在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python  虚拟机)来执行这些编译好的byte code。这种机制的基本思想跟Java,.NET是一致的。然而,Python Virtual Machine与Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一种更高级的Virtual Machine。这里的高级并不是通常意义上的高级,不是说Python的Virtual Machine比Java或.NET的功能更强大,而是说和Java 或.NET相比,Python的Virtual Machine距离真实机器的距离更远。或者可以这么说,Python的Virtual Machine是一种抽象层次更高的Virtual Machine。
  基于C的Python编译出的 字节码文件,通常是.pyc格式。

编辑本段优点

   简单:Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。
   易学:Python极其容易上手,因为Python有极其简单的语法。
   免费、开源: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文件。

编辑本段应用

  
   [1] 系统编程:提供 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,symbian S60V5系统上的AVG游戏引擎。因其基于 python平台开发,并且适用于创建 秋之回忆( memories off)风格的 AVG游戏,故命名为PYMO。 [2]
   黑客编程: python有一个hack的库,内置了你熟悉的或不熟悉的函数,但是缺少成就感。
   用Python写简单爬虫
   [3] 首先,要通过urllib2这个Module获得对应的HTML源码。
  import urllib2
  url='http://www。baidu。com/s?wd=cloga'
  content=urllib2.urlopen(url).read()通过上面这三句就可以将URL的源码存在content变量中,其类型为字符型。
  接下来是要从这堆HTML源码中提取我们需要的内容。用Chrome查看一下对应的内容的代码(也可以用Firefox的Firebug)。
  可以看到url的信息存储在span标签中,要获取其中的信息可以用正则式。

编辑本段部分工具及功能

   Tkinter
  Python默认的图形界面接口。Tkinter是一个和Tk接口的Python模块,Tkinter库提供了对Tk API的接口,它属于Tcl/Tk的GUI工具组。
   PyGTK
  用于python GUI程序开发的GTK+库。GTK就是用来实现GIMP和Gnome的库。
   PyQt
  用于python的Qt开发库。QT就是实现了KDE环境的那个库,由一系列的模块组成,有qt, qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300个类和超过5750个的函数和方法。PyQt还支持一个叫qtext的模块,它包含一个QScintilla库。该库是Scintillar编辑器类的Qt接口。
   wxPython
  GUI编程框架,熟悉MFC的人会非常喜欢,简直是同一架构(对于初学者或者对设计要求不高的用户来说,使用Boa Constructor可以方便迅速的进行wxPython的开发)
   PIL
  python提供强大的图形处理的能力,并提供广泛的图形 文件格式支持,该库能进行图形格式的转换、打印和显示。还能进行一些图形效果的处理,如图形的放大、缩小和旋转等。是Python用户进行图象处理的强有力工具。
   Psyco
  一个Python代码加速度器,可使Python代码的执行速度提高到与编译语言一样的水平。
   xmpppy
  Jabber服务器采用开发的XMPP协议,Google Talk也是采用XMPP协议的IM系统。在Python中有一个xmpppy模块支持该协议。也就是说,我们可以通过该模块与Jabber服务器通信,是不是很Cool。
   PyMedia
  用于多媒体操作的python模块。它提供了丰富而简单的接口用于多媒体处理(wav, mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平台下使用。
   Pmw
  Python megawidgets,Python超级GUI组件集,一个在python中利用Tkinter模块构建的高级GUI组件,每个Pmw都合并了一个或多个Tkinter组件,以实现更有用和更复杂的功能。
   PyXML
  用Python解析和处理XML文档的工具包,包中的4DOM是完全相容于W3C DOM规范的。它包含以下内容:
  xmlproc: 一个符合规范的XML解析器。Expat: 一个快速的,非验证的XML解析器。还有其他和他同级别的还有 PyHtml PySGML。
   PyGame
  用于多媒体开发和游戏软件开发的模块。
   PyOpenGL
  模块封装了“OpenGL应用程序编程接口”,通过该模块python程序员可在程序中集成2D和3D的图形。
   NumPy、NumArray、SAGE
  NumArray是Python的一个扩展库,主要用于处理任意维数的固定类型数组,简单说就是一个矩阵库。它的底层代码使用C来编写,所以速度的优势很明显。SAGE是基于NumPy和其他几个工具所整合成的数学软件包,目标是取代Magma, Maple, Mathematica和Matlab 这类工具。
   MySQLdb
  用于连接MySQL数据库。还有用于zope的ZMySQLDA模块,通过它就可在zope中连接mysql数据库。
   Python-ldap
  提供一组面向对象的API,可方便地在python中访问ldap目录服务,它基于OpenLDAP2.x。
   smtplib
  发送电子邮件。
   ftplib
  定义了FTP类和一些方法,用以进行客户端的ftp编程。如果想了解ftp协议的详细内容,请参考RFC959。

编辑本段升级

  Python的3.0版本,在开发阶段被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的 升级。为了不带入过多的累赘,Python 3.0在设计的时候就没有考虑 向下兼容。许多针对早期Python版本设计的程序都无法在Python 3.0上正常运行。为了照顾现有程序,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和 库,同时考虑了向Python 3.0的迁移。基于早期Python版本而能正常运行于Python 2.6并无警告的程序可以通过一个2 to 3的转换工具无缝迁移到Python 3.0。
  Python 3.0的变化主要在以下几个方面:
  部分函数和语句的改变:最引人注意的改变是print语句没有了,取而代之的是print函数。
  字符串和 字节:类似 Java,str类表示一个 Unicode字符串,代替了早期版本的 unicode类。而一堆 字节则用类似b"abc"的语法创建,用bytes类表示。

编辑本段开发环境

Python IDE

  ●IDLE:Python内置IDE (随python安装包提供)
  ●Komodo和Komodo Edit:后者是前者的免费精简版
  ●PythonWin: ActivePython或pywin32均提供该IDE,仅适用于Windows
  ●SPE(Stani's Python Editor):功能较多的自由软件,基于wxPython
  ●Ulipad:功能较全的自由软件,基于wxPython;作者是中国Python高手limodou
  ●WingIDE:可能是功能最全的IDE,但不是自由软件(教育用户和开源用户可以申请免费key)
  ●Eric:基于 PyQt的自由软件,功能强大。全名是:The Eric Python IDE
  ●DrPython
  ● PyScripter:使用Delphi开发的轻量级的开源Python IDE, 支持Python2.6和3.0。
  ● PyPE:一个开源的跨平台的PythonIDE。
  ● bpython: 类Unix操作系统下使用curses库开发的轻量级的Python 解释器。语法提示功能。

IDE软件

  ●eclipse + pydev 插件:方便调试程序
  ●emacs:自带python支持,自动补全、refactor等功能需要 插件支持
  ●Vim: 最新7.3版编译时可以加入python支持,提供python代码自动提示支持
  ●Visual Studio 2003 + VisualPython:仅适用Windows,已停止维护,功能较差
  ● SlickEdit
  ●Visual Studio 2010 + Python Tools for Visual Studio
  ● TextMate
  ●Netbeans IDE
  另外,诸如 EditPlus、 UltraEdit、 PSPad等通用的 程序员 文本编辑器软件也能对Python代码编辑提供一定的支持,比如代码自动着色、注释 快捷键等,但是否够得上 集成开发环境的水平,尚有待评估。

编辑本段问题

  1. 运行速度慢(这里是指与C和c++相比)。
  2. 中文资料匮乏(好的python中文资料屈指可数)。托社区的福,有几本优秀的教材已经被翻译了,但入门级教材多,高级内容还是只能看英语版。
  3. 构架选择太多。不过这也从另一个侧面说明,python比较优秀,吸引的人才多,项目也多。

你可能感兴趣的:(Python)