知无涯

吾生也有涯,而知也无涯,以有涯随无涯,殆已
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Python学习笔记(一)--Python介绍(转载)

Posted on 2008-07-22 10:39  Fred du  阅读(1297)  评论(0编辑  收藏  举报

Python (发音:[ 'paiθ(ə)n; (US) 'paiθɔn ]),是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。

这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行。
目前,基于这种语言的相关技术正在飞速的发展,用户数量急剧扩大,相关的资源非常多。

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!
解释性----这一点需要一些解释。一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而 Python语言写的程序不需要编译成二进制代码。你可以直接从源代码 运行程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于你不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。由于你只需要把你的Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得你的Python程序更加易于移植。
面向对象----Python即支持面向过程的编程也支持面向对象的编程。在"面向过程"的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在 "面向对象"的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言如C++和Java相比,Python以一种非常强大又简单的方式实现面向对象编程。
可扩展性----如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
可嵌入性----你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
丰富的库----Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、 FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。记住,只要安装了 Python,所有这些功能都是可用的。这被称作Python的"功能齐全"理念。除了标准库以外,还有许多其他高质量的库,如wxPython、 Twisted和Python图像库等等。
概括----Python确实是一种十分精彩又强大的语言。它合理地结合了高性能与使得编写程序简单有趣的特色。

Python的Hello World程序
下面是一个在标准输出设备上输出Hello World的简单程序,这种程序通常作为开始学习编程语言时的第一个程序:
#!/usr/bin/env python
print "Hello, world!"
或者:
import sys
sys.stdout.write("Hello, world\n")

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手中诞生了。实际上,第一个实现是在Mac机上。可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix shell和C的习惯。
Python在编程语言中的定位
很多大规模软件开发计划例如 Zope, Mnet 及 BitTorrent. Google都在广泛地使用它。
通常认为,Python是一种解释性的语言,但是这种说法是不正确的,实际上,Python在执行时,首先会将.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。
基于C的Python编译出的字节码文件,通常是.pyc格式。

在实际开发中,python常被昵称为胶水语言,这不是说他会把你的手指粘住,而是说他能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,速度要求非常高,就可以用C++重写。

Python的设计理念
可扩充性可说是Python作为一种编程语言的特色。新的内置模块(module)可以用C 或 C++写成。而我们也可为现成的模块加上Python的接口。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)完全相反。这似乎是人们常把Perl和Python互相比较的重要原因。
Python语言是一种清晰的语言的另一个意思是,它的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。这样有意的强制程序员养成良好的编程习惯。其中很重要的一项就是Python的缩进规则。
例如if语句:
if age<21:
print "You cannot buy wine!\n"
print "But you can buy chewing gum.\n"
print "this is outside if\n"
一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而C语言是用一对花括号{}来明确的定出模块的边界的,与字符的位置毫无关系)。这一点曾经引起过争议。因为自从C这类的语言诞生后,语言的语法含义与字符的排列方式分离开来,曾经被认为是一种程序语言的进步。不过不可否认的是,通过强制程序员们缩进(包括if,for和函数定义等所有需要使用模块的地方),Python确实使得程序更加清晰和美观。
另外Python在其他部分的设计上也坚持了清晰划一的风格,这使得Python称为一门易读性、易维护性好,并且被大量用户所欢迎的、用途广泛的语言。Python直接编写的程序段有时运行效率甚至高于用C编写的程序。

Python的不适之处
虽然Python是一个非常成功的语言,但对于习惯其他语言的程序员,有两个地方会让他们感觉略有不适。
1. 强制缩进
这也许不应该被称为局限,但是它用缩进来区分语句关系的方式还是给很多初学者带来了困惑。即便是很有经验的Python程序员,也可能陷入陷阱当中。最常见的情况是tab和空格的混用会导致错误,而这是用肉眼无法分别的。
2. 单行语句和命令行输出问题
很多时候不能将程序连写成一行,如import sys;for i in sys.path:print i。而perl和awk就无此限制,可以较为方便的在shell下完成简单程序,不需要如Python一样,必须将程序写入一个.py文件。(对很多用户而言这也不算是限制)

Python的缺点和补救措施
NO.1 运行速度(虽然比java快,但没法和需要编译的语言相比。)。有速度要求的话,用C++改写关键部分吧。
NO.2 国内市场较小(国内以python来做主要开发的,目前只有一些 web2.0公司)。但时间推移,目前很多国内软件公司,尤其是游戏公司,也开始规模使用他。
No.3 中文资料匮乏(好的python中文资料屈指可数)。托社区的福,有几本优秀的教材已经被翻译了,但入门级教材多,高级内容还是只能看英语版。
NO.4 构架选择太多(没有像C#这样的官方.net构架,也没有像rudy由于历史较短,构架开发的相对集中。rudy on rails 构架开发中小型web程序天下无敌)。不过这也从另一个侧面说明,python比较优秀,吸引的人才多,项目也多。

Python的前景
Python在编程领域的占有率一直处于稳步上升之中,根据最新的数据,Python排名第六。前五名分别是Java、C、VB、PHP和C++. 作为一个很年轻的语言,Python的位置已经相当令人振奋了。随着微软将Python纳入.Net 平台,相信Python的将来会更加强劲发展。Python 很可能会成为.Net平台快速开发的主流语言。欲了解这方面情况,请参考Iron Python的相关信息.
著名的搜索引擎 Google 也大量使用Python。更加令人吃惊的是,在Nokia智能手机所采用的Symbian操作系统上,Python成为继C++,Java之后的第三个编程语言!2006年的Google编程大赛已经将Python作为参赛语言之一,可见Python的影响力之巨大。

Python的应用
Zope-应用服务器
Plone-内容管理系统
Django-鼓励快速开发的web framework
Twisted - Python Network Application Framework Python的网络应用程序框架
TurboGears - 另一个Web应用快速开发框架
Bit Torrent - 著名的BT下载工具
更多python的著名应用可以参看该地址:http://www.python.org/about/success/

Python语言资源
官方主页 :http://www.python.org/
For windows的 python解释器 (包括tkInterGUI开发环境,一个简单的IDE,完整广泛的英文文档)9MB:http://www.python.org/ftp/python/2.4.3/python-2.4.3.msi
一份不错的python中文教程:http://www.woodpecker.org.cn/obp/diveintopython-zh-5.4/zh-cn/dist/html/toc/index.html 该站致力于python研究,站内还有大量优秀教材下载。
python中文社区 :http://python.cn/ 国内python大牛尽会于此
http://www.pythonet.cn - python 中文手册
ChinaUNIX论坛区的python版 http://bbs.chinaunix.net/forum-55-1.html 基本可以认为是国内论坛中python水平最高的
一本最佳的python入门书籍 (英文)http://china-pub.shop.eol.cn/computers/common/info.asp?id=25523
一个很好的开源pythonIDE http://stani.be/python/spe/blog/

Python的库
由于设计者和开源社区的共同努力,在python中有大量优秀的库可以被直接调用以高效地完成不同需求的工作。这里列举一些常见常用的库:
Tkinter---- Python默认的图形界面接口。
Tkinter是一个和Tk接口的Python模块,Tkinter库提供了对Tk API的接口,它属于Tcl/Tk的GUI工具组。Tcl/Tk是由John Ousterhout发展的书写和图形设备。Tcl(工具命令语言)是个宏语言,用于简化shell下复杂程序的开发,Tk工具包是和Tcl一起开发的,目的是为了简化用户接口的设计过程。Tk工具包由许多不同的小部件,如一个按钮、一个滚动条等。通过Tk提供的这些小部件,我们就可快速地进行GUI开发。Perl、Scheme等语言也利用Tk库进行GUI开发。Tkinter是跨平台,在各种平台下都能使用。
Python Imaging Library(PIL)----python提供强大的图形处理的能力,并提供广泛的图形文件格式支持,该库能进行图形格式的转换、打印和显示。还能进行一些图形效果的处理,如图形的放大、缩小和旋转等。是Python用户进行图象处理的强有力工具。
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来编写,所以速度的优势很明显。NumPy是Numarray的后继者,用来代替NumArray。SAGE是基于NumPy和其他几个工具所整合成的数学软件包,目标是取代 Magma, Maple, Mathematica和Matlab 这类工具。
MySQLdb模块---- 用于连接MySQL数据库。还有用于zope的ZMySQLDA模块,通过它就可在zope中连接mysql数据库。
PyGTK ---- 用于python GUI程序开发的GTK+库。GTK就是用来实现GIMP和Gnome的那个库。有了它,你完全可以自信的尝试自己制造Photoshop
PyQt ---- 用于python的Qt开发库。QT就是实现了KDE环境的那个库,由一系列的模块组成,有qt, qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300个类和超过5750个的函数和方法。PyQt还支持一个叫qtext的模块,它包含一个QScintilla库。该库是 Scintillar编辑器类的Qt接口。
PyMedia ---- 用于多媒体操作的python模块。它提供了丰富而简单的接口用于多媒体处理(wav, mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平台下使用。
Psyco ---- 一个Python代码加速度器,可使Python代码的执行速度提高到与编译语言一样的水平。
Python-ldap ---- 提供一组面向对象的API,可方便地在python中访问ldap目录服务,它基于OpenLDAP2.x。
smtplib模块 ---- 发送电子邮件。
ftplib模块 ---- 定义了FTP类和一些方法,用以进行客户端的ftp编程。我们可用python编写一个自己的ftp客户端程序,用于下载文件或镜像站点。如果想了解ftp协议的详细内容,请参考RFC959。
xmpppy模块 ---- Jabber服务器采用开发的XMPP协议,Google Talk也是采用XMPP协议的IM系统。在Python中有一个xmpppy模块支持该协议。也就是说,我们可以通过该模块与Jabber服务器通信,是不是很Cool。
下面这些就不详细介绍,只列出名字和功能
adodb ---- ADO数据库连接组件
bsddb3 ---- BerkeleyDB的连接组件
chardet ---- 编码检测
Cheetah ---- 构建和扩充任何种类的基于文本的内容
cherrypy ---- 一个WEB framework
ctypes ---- 用来调用动态链接库
Cx-oracle ---- 连接oracle的工具
DBUtils ---- 数据库连接池
django ---- 一个WEB framework
DPKT ---- raw-scoket网络编程
docutils ---- 用来写文档的
dpkt ---- 数据包的解包和组包
feedparser ---- rss解析
Kodos ---- 正则表达式调试工具
Mechanize ---- 爬虫连接网站常用
pefile ---- windows pe文件解析器
py2exe ---- 用来生成windows可执行文件
pycurl ---- URL处理工具
pydot ---- 画图的,graphiz
pyevent ---- Python的事件支持
pylint ---- 培养良好的编码习惯
Pylons ---- 又一个web framework
pypcap ---- 抓包的
pysqlite2 ---- SQLite的连接组件
python-dnet ---- 控制网络安全的其他设备
pythonwin ---- Python的Windows扩展
pywmi ---- 省了好多折腾功夫
reportlab ---- Python操作PDF的Libary。
scapy ---- 网络包构建分析框架,可编程的wireshark,有兴趣的google "Silver Needle in the Skype"
scons ---- 项目构建工具,写好了模板用起来还是很方便的
sendpkt ---- Python发包
setuptools ---- 一套python包管理机制
simplejson ---- JSON的支持
sqlalchemy ---- SQL数据库连接池
SQLObject ---- 数据库连接池
twisted ---- 巨无霸的网络编程框架
winpdb ---- 自己的程序或者用别的库不太明白的时候就靠它了
wxPython ---- GUI编程框架,熟悉MFC的人会非常喜欢,简直是同一架构
除此之外还有很多,根本无法完全列举。

开源社区的工作已经完成到这样的程度,基本上各种常见的编程需求都已经有非常成熟稳定高速的模块来实现,你所需要做的,只是去阅读文档然后把它找出来。

Technorati : python 笔记