新聞中心
Python語(yǔ)言是不被大多數(shù)人知道的東西,這里就簡(jiǎn)單概述下Python語(yǔ)言,順便閑談一下Python 標(biāo)準(zhǔn)庫(kù)?!八自?huà)”說(shuō):庫(kù)即是語(yǔ)言,語(yǔ)言即是庫(kù)。由此可見(jiàn)擁有一套高質(zhì)量、具備良好可復(fù)用庫(kù)對(duì)于一門(mén)通用開(kāi)發(fā)語(yǔ)言來(lái)說(shuō)有多重要。這也的難怪“C + + 老爹”BjarneStroustrup? 逢人就大倒苦水:C++的庫(kù)還是太少,C++社群需要開(kāi)發(fā)更多高質(zhì)量的庫(kù)出來(lái)!

還好,為Python語(yǔ)言開(kāi)發(fā)一套質(zhì)量不錯(cuò)的庫(kù)的復(fù)雜程度遠(yuǎn)沒(méi)有C++來(lái)得復(fù)雜。而且Python社區(qū)同樣也深知庫(kù)的重要性。結(jié)果就是Python的發(fā)行版即奉上超過(guò)300個(gè)的標(biāo)準(zhǔn)庫(kù)(這還不包括專(zhuān)門(mén)針對(duì)Mac機(jī)的50 余個(gè)庫(kù),誰(shuí)讓那小子另類(lèi)呢)。 300 多個(gè)庫(kù)中,絕大部分具備跨平臺(tái)能力(*NIX/Windows)。這些庫(kù)覆蓋了開(kāi)發(fā)的方方面面,Python語(yǔ)言的用戶(hù)可以在一個(gè)典型命令行環(huán)境下(比如Linux Shell),僅僅利用標(biāo)準(zhǔn)庫(kù)即可完成絕大部分工作,同時(shí)無(wú)需考慮庫(kù)的各種兼容性問(wèn)題。Python社群對(duì)于庫(kù)的重視可見(jiàn)一斑。
即便是擁有如此多的標(biāo)準(zhǔn)庫(kù)。這也似乎未能阻止Python社群的開(kāi)發(fā)者們天馬行空般的思維。借助于動(dòng)態(tài)語(yǔ)言簡(jiǎn)潔、優(yōu)雅、靈活的表達(dá)能力,這些第三方的庫(kù)經(jīng)常展現(xiàn)出令人贊嘆的想象力。
好吧,現(xiàn)在讓我們?cè)邶嫶蟮腜ython庫(kù)選取點(diǎn)滴,也許它能帶給我們一些另類(lèi)的思考。#t#
SQLObject
SQLObject 可以看做是Python領(lǐng)域的Hibernate。它也是目前python社區(qū)中最為成熟方便的O/R mapping工具。和Hibernate相比,SQLObject 利用了動(dòng)態(tài)語(yǔ)言的獨(dú)有特性,通過(guò)靈活使用繼承、靈活使用MetaData?能力,能夠快速方便定義直接在程序中定義映射類(lèi),不用像Hibernate中那樣還需單獨(dú)定義一個(gè)XML文件。同樣,借助強(qiáng)大的動(dòng)態(tài)能力,SQLObject 還擁有一個(gè)Hibernate所遠(yuǎn)不及的功能,那就是SQLObject 的映射類(lèi)可以在運(yùn)行時(shí)動(dòng)態(tài)改變自身結(jié)構(gòu),這也意味著數(shù)據(jù)庫(kù)中的表結(jié)構(gòu)也可以在運(yùn)行時(shí)進(jìn)行改變??傊?,對(duì)Hibernate略有了解的開(kāi)發(fā)者均能迅速理解SQLObject。雖然我一直認(rèn)為SQLObject 還遠(yuǎn)未能將Python 的動(dòng)態(tài)能力發(fā)揮到***。不過(guò)這卻是一個(gè)良好的開(kāi)始。也許我們可以在不久將來(lái)看到更多更具新意的O/R mapping 工具。
TurboGear?
自RoR(Ruby on Rails)在Web開(kāi)發(fā)領(lǐng)域一夜成名后,在其它語(yǔ)言社區(qū),跟風(fēng)之作也如雨后春筍一般涌現(xiàn)出來(lái)。雖然TurboGear?并非刻意模仿RoR 之作,不過(guò)它確確實(shí)實(shí)借著RoR流行潮流得到更多人的重視。與RoR相同,TurboGear?也是一個(gè)輕量級(jí)Web開(kāi)發(fā)套件,通過(guò)幾個(gè)命令行工具能夠快速生成以數(shù)據(jù)庫(kù)為核心的基本框架代碼。典型的RoR 思想!這和許多開(kāi)源框架的原則一樣——“避免重新發(fā)明輪子”。TurboGear?的Web 控制層使用CherryPy?;持久層使用SQLObject;模板使用Kid;AJAX使用MochiKit?。幾乎所有的重要的功能組件都源自第三方。TurboGear?自身更像一個(gè)黏合劑,把所有的功能組合在一起,并能夠形成力量的倍增。
4Suite
雖然Python 標(biāo)準(zhǔn)庫(kù)提供了XML處理工具,但是它只提供一些基本功能。如果你想獲得更為強(qiáng)大的XML 處理能力,4Suite是一個(gè)更好的選擇。
4Suite被稱(chēng)為XML工具中“內(nèi)行的選擇”。除了最基本的Dom-Like和SAX-Like處理庫(kù)外,4Suite 還提供XInclude,XPointer,XLink,XPath,XUpdate用于XML文檔的查詢(xún)、更新操作等等;提供XSLT完整處理能力。
4Suite不光功能強(qiáng)大,性能也相當(dāng)不錯(cuò)。這主要是得益于其核心代碼部分采用C完成。這在需要處理大量XML文檔的地方,4Suite實(shí)在是一個(gè)***的選擇。
Pyro
Pyro 的全稱(chēng)是“Python Remote Objects”。按照字面即可理解Pyro 的功能:提供遠(yuǎn)程對(duì)象。Pyro 為Python語(yǔ)言提供異常簡(jiǎn)潔的RPC解決方案。其實(shí)Python語(yǔ)言中不乏一些更加通用的遠(yuǎn)程調(diào)用方案,例如都是基于XML 的XMLRPC和SOAP。那么 Pyro這樣的單純的Python遠(yuǎn)程調(diào)用方案具有什么樣的優(yōu)勢(shì)呢?那就是性能與易用性。
由于動(dòng)態(tài)語(yǔ)言具有強(qiáng)大反射能力,因此實(shí)現(xiàn)對(duì)象序列化對(duì)于Python來(lái)說(shuō)簡(jiǎn)直易如反掌。對(duì)象的序列化在Python中被稱(chēng)為pickle,這是許多Python應(yīng)用的核心機(jī)制。Pyro 也正是充分利用pickle 的威力,在網(wǎng)絡(luò)間提供遠(yuǎn)程對(duì)象的調(diào)用。它的性能要遠(yuǎn)遠(yuǎn)超過(guò)使用XML 對(duì)遠(yuǎn)程對(duì)象進(jìn)行編碼/解碼。同時(shí),它在接口調(diào)用設(shè)計(jì)上也非常簡(jiǎn)潔。在服務(wù)器端和客戶(hù)端只需2、3 行代碼就完成對(duì)象的封裝與調(diào)用,遠(yuǎn)比SOAP來(lái)得簡(jiǎn)單輕松。
Twisted
上個(gè)月,Zope 3.2發(fā)布,在這個(gè)***版中, 一個(gè)重要的變化就是:使用了近十年的處理Web請(qǐng)求的網(wǎng)絡(luò)框架代碼被放棄,取而代之是以Twisted 為核心實(shí)現(xiàn)的代碼。據(jù)稱(chēng)這樣可以改善系統(tǒng)性能以及可擴(kuò)展性。于是Twisted庫(kù)再一次成為了人們關(guān)注的焦點(diǎn)。 Twisted 的核心概念是非阻塞異步網(wǎng)絡(luò)服務(wù)器(所以它也被成為Python中ACE,如果你還不知道什么是 ACE,那么看看前面關(guān)于C++庫(kù)的文章),這是目前為止性能***的網(wǎng)絡(luò)處理模型。也許是非阻塞異步處理的天生復(fù)雜性所致,Twisted 幾乎是我所見(jiàn)過(guò)的最復(fù)雜,最難用的Python庫(kù)。Twisted 的使用者需要面對(duì)大量新的概念和新的模式,這一點(diǎn)上和ACE 倒頗有幾分相似。陡峭的學(xué)習(xí)曲線(xiàn),阻礙了很多人掌握Twisted 庫(kù)。這也許是想要獲得高性能所付出的必要代價(jià)。難怪 O’REYLLI在其出版的關(guān)于Twisted的書(shū)的封面引用了一只九頭怪蛇,還真是貼切。
Psyco
贊美Python的好話(huà)可以說(shuō)一籮筐,那么它的缺點(diǎn)是什么?這還用問(wèn)嗎,當(dāng)然是性能。性能——已經(jīng)成為Python根深蒂固的老毛病了。不要說(shuō)和C++/Java/C#這樣的語(yǔ)言相比,即使是和它的同門(mén)兄弟們——Ruby、Perl、PHP 這樣的腳本語(yǔ)言相比,Python的性能依然是最糟糕的。Python的設(shè)計(jì)者們似乎僅僅在乎語(yǔ)言機(jī)制的***,幾乎不考慮性能。CPythony 引擎已經(jīng)發(fā)展了這么多年,查看其源代碼,性能優(yōu)化代碼少之又少。對(duì)象引用模型至今還在使用引用計(jì)數(shù)器的方式,至于發(fā)展一個(gè)JIT 引擎,算了吧,不要指望了。還好,Psyco 的出現(xiàn),帶給我們了一線(xiàn)希望。Psyco 通過(guò)將運(yùn)行中字節(jié)碼編譯為二進(jìn)制代碼從而大幅提升整個(gè)應(yīng)用的性能,在某些環(huán)境中甚至能將速度提升一個(gè)數(shù)量級(jí)。雖然Psyco還不能視為一個(gè)真正意義上的JIT 的引擎,也無(wú)法像Java中的JIT 那樣提供完全透明的服務(wù)。但我們?nèi)匀灰獮镻syco的發(fā)展感到振奮。目前,在其***版本中,只需兩行代碼的添加,就能使你的程序充分使用Psyco,從而提升性能。
wxPython
在許多人眼里,動(dòng)態(tài)語(yǔ)言/腳本語(yǔ)言一般僅適合完成命令行或WEB的工作,而在桌面開(kāi)發(fā)方面實(shí)在是丑陋不堪。而wxPython的出現(xiàn)無(wú)疑是給這種偏見(jiàn)以有力的回?fù)簟?/p>
wxPython 實(shí)際上發(fā)展多年的C++框架wxWindow(現(xiàn)已更名為wxWidgets)的Python封裝。而 wxWindow的目標(biāo)是建立一個(gè)跨平臺(tái)的GUI 框架。wxWindow 現(xiàn)已能在Windows/Unix/Mac 上良好運(yùn)行。自然wxPython也能橫跨上述幾個(gè)平臺(tái)。
wxPython 使用的原生窗口。這就意味著使用wxPython 開(kāi)發(fā)的GUI 和操作系統(tǒng)本地GUI 系統(tǒng)在界面外觀(guān)上沒(méi)有任何區(qū)別。如果和Java中GUI庫(kù)對(duì)比一下,就可以發(fā)現(xiàn),wxPython 更加類(lèi)似SWT 而不是Swing。因?yàn)镾WT也是使用的原生窗口,想想Eclipse 的界面有多漂亮就知道原生窗口的優(yōu)勢(shì)了。
雖然不少C++愛(ài)好者對(duì)wxWindow框架的設(shè)計(jì)頗有微詞,不過(guò)在經(jīng)過(guò)Python的封裝后,沒(méi)有了指針、沒(méi)有了 MFC時(shí)代的事件機(jī)制,wx框架的易用性獲得了極大提升。這也是Python的另一個(gè)巨大魅力所在。以上介紹Python語(yǔ)言。
網(wǎng)站標(biāo)題:簡(jiǎn)述Python語(yǔ)言經(jīng)驗(yàn)總結(jié)
URL鏈接:http://m.5511xx.com/article/dpedeio.html


咨詢(xún)
建站咨詢(xún)
