Python 不僅僅是一個設計優秀的程式語言,它能夠完成現實中的各種任務,包括開發人員們日複一日所做的事情。作為編製其他組件、實現獨立程式的工具,它通常應用於各種領域。實際上,作為一種通用語言,Python 的應用角色幾乎是無限的:你可以在任何場合應用Python, 從網站和遊戲開發到機器人和太空梭控制。
儘管如此,Python 的應用領域分為如下幾類。下文將介紹一些Python 如今最常見的應用領域,以及每個應用領域內所用的一些工具。我們不會對各個工具進行深入探討,如果你對這些話題感興趣,請從Python 網站或其他一些資源中擷取更多的資訊。
系統編程
Python 對作業系統服務的內建介面,使其成為編寫可移植的維護作業系統的管理工具和組件(有時也被稱為Shell 工具)的理想工具。Python 程式可以搜尋檔案和分類樹,可以運行其他程式,用進程或線程進行平行處理等等。
Python 的標準庫綁定了POSIX 以及其他常規作業系統(OS )工具:環境變數、檔案、通訊端、管道、進程、多線程、Regex模式比對、命令列參數、標準流介面、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 之上的。通過適當的庫,你可以使用其他的GUI 工具包,例如,Qt 、GTK 、MFC 和Swing 等。對於運行於瀏覽器中的應用或在一些簡單介面的需求驅動下,Jython(Java 版本的Python ,我們將會在第2章中進行介紹)和Python 伺服器端CGI 指令碼提供了其他一些使用者介面的選擇。
Internet 指令碼
Python 提供了標準Internet 模組,使Python 能夠廣泛地在多種網路任務中發揮作用,無論是在伺服器端還是在用戶端都是如此。指令碼可以通過通訊端進行通訊;從發給伺服器端的CGI 指令碼的表單中解析資訊;通過URL 擷取網頁;從擷取的網頁中解析HTML 和XML 檔案;通過XML-RPC 、SOAP 和Telnet 通訊等。Python 的庫使這一切變得相當簡單。
不僅如此,從網路上還可以獲得很多使用Python 進行Internet 編程的第三方工具。例如,HTMLGen 可以從Python 類的描述中產生HTML 檔案,mod_python 包可以使在Apache 伺服器上啟動並執行Python 程式更具效率並支援Python Server Page 這樣的伺服器端模板,而且支援用戶端啟動並執行伺服器端Applet 。此外,Python 湧現了許多Web 開發套件,例如,Django 、TurboGears 、Pylons 、Zope 和WebWare ,使Python 能夠快速構建功能完善和高品質的網站。
組件整合
在介紹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 提供了對所有主流關聯式資料庫系統的介面,例如,Sybase 、Oracle 、Informix 、ODBC 、MySQL 、PostgreSQL 、SQLite 。Python 定義了一種通過Python 指令碼存取SQL 資料庫系統的可移植的資料庫API ,這個API 對於各種底層應用的資料庫系統都是統一的。例如,因為廠商的介面實現為可移植的API ,所以一個寫給自由軟體MySQL 系統的指令碼在很大程度上不需改變就可以工作在其他系統上(例如,Oracle )-- 你僅需要將底層的廠商介面替換掉就可以實現。
Python 標準的pickle 模組提供了一個簡單的對象持久化系統:它能夠讓程式輕鬆地將整個Python 對象儲存和恢複至檔案和檔案類的對象中。在網路上,同樣可以找到名叫ZODB 的第三方系統,它為Python 指令碼提供了完整的物件導向資料庫系統,系統SQLObject 可以將關聯式資料庫映射至Python 的類別模組。並且,從Python 2.5 版本開始,SQLite 已經成為Python 內建標準庫的一部分了。
快速原型
對於Python 程式來說,使用Python 或C編寫的組件看起來都是一樣的。正因為如此,我們可以在一開始利用Python 做系統原型,之後再將組件移植到C或C++ 這樣的編譯語言上。和其他的原型工具不同,當原型確定後,Python 不需要重寫。系統中不需要像C++ 這樣執行效率的部分可以保持不變,從而使維護和使用變得輕鬆起來。
數值計算和科學計算編程
我們之前提到過的NumPy 數值編程擴充包括很多進階工具,例如,矩陣對象、標準數學庫的介面等。通過將Python 與出於速度考慮而使用編譯語言編寫的數值計算的常規代碼進行整合,NumPy 將Python 變成一個縝密嚴謹並簡單易用的數值計算工具,這個工具通常可以替代已有的代碼,而這些代碼都是用FORTRAN 或C++ 等編譯語言編寫的。其他一些數值計算工具為Python 提供了動畫、3D 可視化、平行處理等功能的支援。
遊戲、映像、人工智慧、XML 、機器人等
Python 的應用領域很多,遠比本書提到的多得多。例如,可以利用pygame 系統使用Python 對圖形和遊戲進行編程;用PIL 和其他的一些工具進行影像處理;用PyRo 工具包進行機器人控制編程;用xml 庫、xmlrpclib 模組和其他一些第三方擴充進行XML 解析;使用神經網路模擬器和專業的系統shell 進行AI 編程;使用NLTK 包進行自然語言分析:甚至可以使用PySol 程式下棋娛樂。可以從Vaults of Parnassus 以及新的PyPI 網站(請在Google 或http://www.python.org 上獲得具體連結)找到這些領域的更多支援。
一般來說,這些特定領域當中有許多在很大程度上都是Python 組件整合角色的再次例證。採用C這樣的編譯語言編寫庫組件,增加Python 至其前端,這樣的方式使Python 在不同領域廣泛地發揮其自身價值。對於一種支援整合的通用型語言,Python 的應用極其廣泛。
企業與政務應用 目前,Python已經成功的實現企業級應用,在全球,已經有很多公司採用Python進行企業級軟體的開發和應用,比如:ERP和CRM這樣的應用。同時,通過Python技術,成功的實現了許多政務應用。
用Python寫的較大的系統Zope:一個應用程式伺服器,具有內容管理、團隊開發、XML、物件導向、SOAP介面等一系先進特性,且開放源碼。參見:www.zope.com。
Gadfly:一個用Python寫的物件導向關係型資料庫,具有小巧、快速、可移植性好,具有大部分SQL語言特性,且開放源碼。參見:http://www.chordate.com/gadfly.html。
還有一些比較有名的公司也在用Python進行原型的開發,如Microsoft、IBM等,還有:
紅帽(Red Hat )曾用Python和Tk一起成功開發配置和管理作業系統的視覺化介面。整個系統可以全面控制Linux作業系統,並根據使用者選擇對設定檔作自動更新。
Infoseek在其公用搜尋引擎使用了Python。該公司還用Python對其軟體進行定製,使終端使用者能對該網站內容進行方便下載。
Python 和其他語言比較
比Tcl 強大。Python 支援"大規模編程",使其適宜於開發大型系統。
有著比Perl 更簡潔的文法和更簡單的設計,這使得Python 更具可讀性、更易於維護,有助於減少程式bug 。
比Java 更簡單、更便於使用。Python 是一種指令碼語言,Java 從C++ 這樣的系統語言中繼承了許多文法和複雜性。
比C++ 更簡單、更便於使用,但通常也不與C++ 競爭。因為Python 作為指令碼語言,常常扮演多種不同的角色。
比Visual Basic 更強大也更具備跨平台特性。由於Python 是開源的,也就意味著它不可能被某一個公司所掌控。
比Ruby 更成熟、文法更具可讀性。與Ruby 和Java 不同的是,OOP 對於Python 是可選的:這意味著Python 不會強制使用者或項目選擇OOP 進行開發。
具備SmallTalk 和Lisp 等動態類型的特性,但是對開發人員及定製系統的終端使用者來說更簡單,也更接近傳統程式設計語言的文法。
特別對不僅僅做文字檔掃描還有也許未來會被人們讀到(或者說你)的程式而言,很多人會發現Python 比目前任何的可用的指令碼或程式設計語言都划得來。不僅如此,除非你的應用要求最尖端的效能,Python 往往是C、C++ 和Java 等系統開發語言的一個不錯的替代品:Python 將會減少很多編寫、調試和維護的麻煩。
目前使用Python的企業Google 在其網路搜尋系統中廣泛應用了Python ,並且聘用了Python 的創作者。
YouTube 視頻分享服務大部分是由Python 編寫的。
流行的P2P 檔案分享系統Bittorrent 是一個Python 程式。
Intel 、Cisco 、Hewlett-Packard 、Seagate 、Qualcomm 和IBM 使用Python 進行硬體測試。
Industrial Light & Magic 、Pixar 等公司使用Python 製作動畫電影。
在經濟市場預測方面,JPMorgan Chase 、UBS 、Getco 和Citadel 使用Python 。
NASA 、Los Alamos 、Fermilab 、JPL 等使用Python 實現科學計算任務。
IRobot 使用Python 開發了商業機器人真空吸塵器。
ESRI 在其流行的GIS 地圖產品中使用Python 作為終端使用者的定製工具。
NSA 在加密和智能分析中使用Python 。
IronPort 電子郵件伺服器產品中使用了超過100 萬行的Python 代碼實現其作業。
OLPC 使用Python 建立其使用者介面和動作模組。