02 Python简介
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,属于应用层软件。自从20 世纪90 年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务、自动化运维、图像处理游戏和Web 网站开发等领域。Python已经成为最受欢迎的程序设计语言之一。4、易读以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python教授程序设计课程。例如麻省理工学院的计算机科学及编程导论课程就使用Python语言讲授。众多开源的科学计算软件包都提供了Python 的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3 个十分经典的科学计算扩展库:NumPy、SciPy 和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。
Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。
Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido 为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为 ABC 语言的一种继承。之所以选中 Python (大蟒蛇的意思)作为程序的名字,是因为他是一个Monty Python 的飞行马戏团的爱好者。
ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC 语言并没有成功,究其原因,Guido 认为是由其非开放性使用原则所造成的。Guido 决心在 Python 中避免这一错误(的确如此,Python 与其它的语言如C、C++和Java结合的非常好)。同时,他还想实现在 ABC 中闪现过但未曾实现的东西。
就这样,Python就在Guido手中诞生了。实际上,Python 首先是在Mac机上实现的。可以说,Python 是从ABC发展起来,主要受到了Modula-3 (另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix shell和C的习惯。成为一门为众多UNIX 和Linux开发者所青睐的开发语言。5
可扩充性可以说是Python能作为一种编程语言的一大特色。扩展的新的模块(module)可以用C 或 C++ 写成。而我们也可为现成的模块加上Python的接口。Python 可以使用户避免过分的语法的羁绊而将精力主要集中到所要实现的程序任务(逻辑)上。
Python也被称为是一门清晰的语言。因为它的作者在设计它的时候,总的指导思想是,对于一个特定的问题,只要有一种最好的方法来解决就好了。
Python语言是一种清晰的语言的另一个意思是,它的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if 语句的下一行不向右缩进)都不能通过编译。这样有意的强制程序员养成良好的编程习惯。其中很重要的一项就是Python的缩进规则。
Python在编程领域的占有率一直处于稳步上升之中,根据最新的数据,Python排名第七。前六名分别是Java,C,VB,C++,PHP和Perl。随着微软将Python纳入.Net 平台,相信Python的将来会更加强劲发展。Python 很可能会成为.Net平台快速开发的主流语言。欲了解这方面情况,请参考Iron Python的相关信息。
著名的搜索引擎 Google 也大量使用Python。更加令人吃惊的是,在Nokia 智能手机所采用的Symbian操作系统上,Python同样也可以运行在Android手机操作系统上,有很多Python爱好者通过Android平台来学习Python语言,无理由不相信Python将 成为继C++,Java 之后的第三个编程语言!可见Python 的影响力之巨大。
通常认为,Python是一种解释性的语言,但是这种说法是不正确的,实际上Pyt hon在执行时,首先会将.py 文件中的源代码编译成Python的byte code (字节码),然后再由Python Virtual Machine来执行这些编译好的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。
Python 不仅仅是一个设计优秀的程序语言,它能够完成现实中的各种任务,包括开发者们日复一日所做的事情。作为编制其他组件、实现独立程序的工具,它通常应用于各种领域。实际上,作为一种通用语言,Python 的应用角色几乎是无限的:你可以在任何场合应用Python, 从网站和游戏开发到机器人和航天飞机控制。
尽管如此,Python 的应用领域分为如下几类。下文将介绍一些Python 如今最常见的应用领域,以及每个应用领域内所用的一些工具。我们不会对各个工具进行深入探讨,如果你对这些话题感兴趣,请从Python 网站或其他一些资源中获取更多的信息。6
Python 对操作系统服务的内置接口,使其成为编写可移植的维护操作系统的管理工具和部件(有时也被称为Shell 工具)的理想工具。Python 程序可以搜索文件和目录树,可以运行其他程序,用进程或线程进行并行处理等等。
Python 的标准库绑定了POSIX 以及其他常规操作系统(OS )工具:环境变量、文件、套接字、管道、进程、多线程、正则表达式模式匹配、命令行参数、标准流接口、Shell 命令启动器、文件名扩展等。此外,很多Python 的系统工具设计时都考虑了其可移植性。例如,复制目录树的脚本无需做任何修改就可以在几乎所有的Python 平台上运行。
Python 的简洁以及快速的开发周期十分适合开发GUI 程序。Python 内置了TKinter 的标准面向对象接口Tk GUI API ,使Python 程序可以生成可移植的本地观感的GUI应用程序 。Python/Tkinter GUI 不做任何改变就可以运行在微软Windows 、X Windows(UNIX 和Linux )以及Mac OS(Classic 和OS X 都支持)等平台上。一个免费的扩展包PMW ,为Tkinter 工具包增加了一些高级部件。此外,基于C++ 平台的工具包wxPython GUI API 可以使用Python 构建可移植的GUI应用程序 。
诸如PythonCard 和Dabo 等一些高级工具包均是构建在wxPython 和Tkinter 的基础API 之上的。对于运行于浏览器中的应用程序,Jython(Java 版本的Python ,我们将会在第2章中进行介绍)和Python 服务器端CGI 脚本提供了其他一些用户界面的选择。
对于传统的数据库需求,Python 提供了对所有主流关系数据库系统的接口,例如,Sybase 、Oracle 、Informix 、ODBC 、MySQL 、PostgreSQL 、SQLite等常用的数据库Python均有相应的接口函数库访问这些数据库。Python定义了一种通过Python 脚本存取SQL数据库系统的且可移植的数据库API 接口函数,这个API对于各种底层应用的数据库系统都是统一的。例如,因为厂商的接口实现为可移植的API ,所以一个写给自由软件MySQL数据库访问应用脚本在很大程度上不需改变就可以工作在其他数据库系统上(例如,Oracle),仅仅需要将底层的厂商接口替换掉就可以实现。
我们之前提到过的Python数值编程方面的扩展包NumPy包括很多高级工具,例如,矩阵对象、标准数学库的接口等。通过NumPy将Python 变成一个缜密严谨并简单易用的数值计算工具,其他一些数值计算工具为Python 提供了动画、3D 可视化、并行处理等功能的支持。
Python可以利用pygame系统进行图像图形处理和游戏编程;用PIL和其他的一些工具进行图像处理;用PyRo 工具包进行机器人控制编程;用xml 库、xmlrpclib 模块和其他一些第三方扩展进行XML 解析;使用神经网络仿真器和专业的系统shell进行AI 编程;使用NLTK 包进行自然语言分析:甚至可以使用PySol 程序下棋娱乐。可以从Vaults of Parnassus 以及新的PyPI 网站(请在Google 或http://www.python.org 上获得具体链接)找到这些领域的更多支持。
在介绍Python 作为控制语言时,曾涉及它的组件集成的角色。Python 可以通过C/C++ 系统进行扩展,并能够嵌套C/C++ 系统的特性,使其能够作为一种灵活的粘合语言,脚本化处理其他系统和组件的行为。例如,将一个C 库集成到Python 中,能够利用Python 进行测试并调用库中的其他组件;将Python 嵌入到产品中,在不需要重新编译整个产品或分发源代码的情况下,能够进行产品的单独定制。
为了在脚本中使用,在Python 连接编译好组件时,例如,SWIG 和SIP 这样的代码生成工具可以让这部分工作自动完成。更大一些的框架,例如,Python 的微软Windows 所支持的COM 、基于Java 实现的Jython 、 基于.NET 实现的IronPython 和各种CORBA 工具包,提供了多种不同的脚本组件。例如,在Windows 中,Python 脚本可利用框架对微软Word 和Excel 文件进行脚本处理。
Python 提供了标准Internet 模块,使Python 能够广泛地在多种网络任务中发挥作用,无论是在服务器端还是在客户端都是如此。脚本可以通过套接字进行通信;从发给服务器端的CGI 脚本的表单中解析信息;通过URL 获取网页;从获取的网页中解析HTML 和XML 文件;通过XML-RPC 、SOAP 和Telnet 通信等。Python 的库使这一切变得相当简单。