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