python 庫簡介
TRANSCRIPT
62 程序员
特别策划 Features
“俗话”说:库即是语
言,语言即是库。由此可见拥有一套
高质量、具备良好可复用库对于一
门通用开发语言来说有多重要。这
也的难怪“C + + 老爹”B j a r n e
Stroustrup逢人就大倒苦水:C++的库
还是太少,C++社群需要开发更多高
质量的库出来!
还好,为Python语言开发一套质
量不错的库的复杂程度远没有C++
来得复杂。而且Python社区同样也深
知库的重要性。结果就是Python的发
行版即奉上超过300个的标准库(这
还不包括专门针对Mac机的50 余个
库,谁让那小子另类呢)。
300多个库中,绝大部分具备跨
平台能力(*NIX/Windows)。这些库
覆盖了开发的方方面面,Python语言
的用户可以在一个典型命令行环境
下(比如Linux Shell),仅仅利用标准
库即可完成绝大部分工作,同时无
需考虑库的各种兼容性问题。Python
社群对于库的重视可见一斑。
即便是拥有如此多的标准库。
这也似乎未能阻止Python社群的开发
者们天马行空般的思维。借助于动
态语言简洁、优雅、灵活的表达能
力,这些第三方的库经常展现出令
人赞叹的想象力。
好吧,现在让我们在庞大的Py-
thon库选取点滴,也许它能带给我们
一些另类的思考。
SQLObjectSQLObject 可以看做是Python领
域的Hibernate。它也是目前python社
区中最为成熟方便的O/R mapping工
具。和Hibernate相比,SQLObject利用
了动态语言的独有特性,通过灵活使
用继承、灵活使用MetaData能力,能
够快速方便定义直接在程序中定义
映射类,不用像Hibernate中那样还需
单独定义一个XML文件。同样,借助
强大的动态能力,SQLObject 还拥有
一个Hibernate所远不及的功能,那就
是SQLObject的映射类可以在运行时
动态改变自身结构,这也意味着数
据库中的表结构也可以在运行时进
行改变。总之,对Hibernate略有了解
的开发者均能迅速理解SQLObject。
虽然我一直认为SQLObject还远
未能将Python的动态能力发挥到极
致。不过这却是一个良好的开始。也
许我们可以在不久将来看到更多更
具新意的O/R mapping 工具。
TurboGear自RoR(Ruby on Rails)在Web开
发领域一夜成名后,在其它语言社
区,跟风之作也如雨后春笋一般涌
现出来。虽然TurboGear并非刻意模仿
RoR之作,不过它确确实实借着RoR
流行潮流得到更多人的重视。
与RoR相同,TurboGear也是一个
轻量级Web开发套件,通过几个命令
行工具能够快速生成以数据库为核
心的基本框架代码。典型的RoR思
想!这和许多开源框架的原则一样
——“避免重新发明轮子”。TurboGear
的Web控制层使用CherryPy;持久层
使用SQLObject;模板使用Kid;AJAX
使用MochiKit。几乎所有的重要的功
能组件都源自第三方。TurboGear自身
更像一个黏合剂,把所有的功能组
合在一起,并能够形成力量的倍增。
4Suite虽然Python标准库提供了XML
处理工具,但是它只提供一些基本
功能。如果你想获得更为强大的XML
处理能力,4Suite是一个更好的选择。
4Suite被称为XML工具中“内行
的选择”。除了最基本的Dom-Like和
SAX-Like处理库外,4Suite还提供
Python库简介□ 文/汤韬
Programmer 63
>>> 程序员开源手册
XInclude,XPointer,XLink,XPath,
XUpdate用于XML文档的查询、更新
操作等等;提供XSLT完整处理能力。
4Suite不光功能强大,性能也相
当不错。这主要是得益于其核心代
码部分采用C完成。这在需要处理大
量XML文档的地方,4Suite实在是一
个完美的选择。
PyroPyro的全称是“Python Remote
Objects”。按照字面即可理解Pyro的
功能:提供远程对象。Pyro 为Python
语言提供异常简洁的RPC解决方案。
其实Python语言中不乏一些更
加通用的远程调用方案,例如都是
基于XML的XMLRPC和SOAP。那么
Pyro这样的单纯的Python远程调用方
案具有什么样的优势呢?那就是性
能与易用性。
由于动态语言具有强大反射能
力,因此实现对象序列化对于Python
来说简直易如反掌。对象的序列化
在Python中被称为pickle,这是许多
Python应用的核心机制。Pyro也正是
充分利用pickle的威力,在网络间提
供远程对象的调用。它的性能要远
远超过使用XML 对远程对象进行编
码/解码。同时,它在接口调用设计
上也非常简洁。在服务器端和客户
端只需2、3行代码就完成对象的封
装与调用,远比SOAP来得简单轻松。
Twisted上个月,Zope 3.2发布,在这个最
新版中,一个重要的变化就是:使用
了近十年的处理Web请求的网络框架
代码被放弃,取而代之是以Twisted为
核心实现的代码。据称这样可以改善
系统性能以及可扩展性。于是Twisted
库再一次成为了人们关注的焦点。
Twisted的核心概念是非阻塞异
步网络服务器(所以它也被成为Py-
thon中ACE,如果你还不知道什么是
ACE,那么看看前面关于C++库的文
章),这是目前为止性能最好的网络
处理模型。也许是非阻塞异步处理
的天生复杂性所致,Twisted几乎是
我所见过的最复杂,最难用的Python
库。Twisted的使用者需要面对大量
新的概念和新的模式,这一点上和
ACE倒颇有几分相似。
陡峭的学习曲线,阻碍了很多
人掌握Twisted库。这也许是想要获
得高性能所付出的必要代价。难怪
O’REYLLI在其出版的关于Twisted的
书的封面引用了一只九头怪蛇,还
真是贴切。
Psyco赞美Python的好话可以说一箩筐,
那么它的缺点是什么?这还用问吗,当
然是性能。性能——已经成为Python根
深蒂固的老毛病了。不要说和C++/
Java/C#这样的语言相比,即使是和它
的同门兄弟们——Ruby、Perl、PHP这
样的脚本语言相比,Python的性能依然
是最糟糕的。Python的设计者们似乎仅
仅在乎语言机制的完美,几乎不考虑性
能。CPythony 引擎已经发展了这么多
年,查看其源代码,性能优化代码少之
又少。对象引用模型至今还在使用引
用计数器的方式,至于发展一个JIT引
擎,算了吧,不要指望了。
还好,Psyco 的出现,带给我们
了一线希望。Psyco通过将运行中字
节码编译为二进制代码从而大幅提
升整个应用的性能,在某些环境中
甚至能将速度提升一个数量级。
虽然Psyco还不能视为一个真正
意义上的JIT的引擎,也无法像Java
中的JIT 那样提供完全透明的服务。
但我们仍然要为Psyco的发展感到振
奋。目前,在其最新版本中,只需两
行代码的添加,就能使你的程序充
分使用Psyco,从而提升性能。
wxPython在许多人眼里,动态语言/脚本
语言一般仅适合完成命令行或WEB
的工作,而在桌面开发方面实在是
丑陋不堪。而wxPython的出现无疑
是给这种偏见以有力的回击。
wxPy t h o n 实际上发展多年的
C++框架wxWindow(现已更名为
wxWidge t s)的Py t h o n封装。而
wxWindow的目标是建立一个跨平台
的GUI 框架。wxWindow现已能在
Windows/Unix/Mac上良好运行。自
然wxPython也能横跨上述几个平台。
wxPython使用的原生窗口。这就
意味着使用wxPython开发的GUI和操
作系统本地GUI系统在界面外观上没
有任何区别。如果和Java中GUI库对比
一下,就可以发现,wxPython更加类
似SWT而不是Swing。因为SWT也是
使用的原生窗口,想想Eclipse的界面
有多漂亮就知道原生窗口的优势了。
虽然不少C++爱好者对wxWindow
框架的设计颇有微词,不过在经过
Python的封装后,没有了指针、没有了
MFC时代的事件机制,wx框架的易用
性获得了极大提升。这也是Python的另
一个巨大魅力所在。
汤韬,OSDN(www.osdn.net.
cn)网站开发主管,对 Linux以及
开源技术拥有广泛兴趣,喜好
Python、Ruby 等动态语言。
作者介绍: