接觸 Python 是兩年前的事了。那時因為要寫個程式來分析數值資料,開始的時候打算用自己最熟的 PHP,試了幾下,很不順手。后來轉用了 Perl,開始的時候都挺順利的。直至有一天整理程式,想把寫好的幾個東西整理成一個工具箱給自己用,試了半天就放棄了:根本是精神虐待。反省后覺得自己學 Perl 只會走捷徑,打算上網找些基本的學習文件從頭努力,但竟然找到了 Python 的網頁。就這樣開始了學 Python,而且是欲罷不能。現在我要寫什么,基本上都是先考慮用 Python,一來實在好用,二來用 Python 寫的程式總會有重用的機會,所以手頭的工具越來越多,用起來就更得心應手了。
如果你以前只會用 Shell Script 或是 DOS Batch File 而想學些其他的東西,Python 會是你的首選,如果你己經會 Perl 或是 Tcl 或是別的什么,那 Python 會令你改變對 scripting language 的想法。
為什么要學 Python?
答:好玩。就是這樣簡單。無論是學 Python 還是用 Python,都是一件賞心樂事。當你寫 shell scripts 寫得鬼哭神號時,當你改 perl scripts 改得頭昏腦漲時,有沒有想過寫 script 其實是很好玩的一件事。你可能從來不相信當你寫一套嚴肅而功能強大的程式,你可以用一個如此好玩的程式語言來開發。更難令你相信的是,就算在程式開發的后期,甚至是幾個月以后當你再次想修改它的時候,你依然都會覺得是一件好玩的事。
Python 能做什么?
答:倒不如問,Python 不能做什么? Python 已經差不多把一個 scripting language 作為整合工具 (gluing tool) 的強大功能完全發揮了出來,任何程式,只要有個給 Python 用的接口,Python 就可以把它據為己用,和其他的程式一塊使用。而且
· Python 有發展 XML 的大型函式庫,并開始有大型系統的構建初型。 · 用 Python 寫的 Zope,可以用來架設整個網站 · Python 語言自己是用 C 來寫的,但現已有用純 Java 寫的 Python 語言實現,近期更有用微軟 .NET 方式實現的 Python 翻譯器,由此證明了 Python 語言定義的高度完整。 · Python 已移植到許多的操作平臺上,包括 Linux、Windows、HP、Solaris、Irix、AIX、BeOS、甚至是 Cray。幾乎和 Perl 一樣多。 ·由于 Python 本身是 object oriented,所以很容易和 C++,Java 等整合,尤其在 Visual 當道的 Windows 系統。這點要比 Perl 好許多。
和其他語言的比較
一般的說法的這樣的:
- Shell script 太舊了,無論如何不能用來寫程式。
- Perl 擅長做服務器的管理,因為它的字串處理功能特別強大,同時有全面的編程接口和操作系統相連。自己用沒問題,就是不懂人家在寫什么。
- PHP 擅長于網頁,因為它可以嵌入在 HTML 文件中并支援各類資料庫。但一離開網頁就左支右絀。
- Python 特別適合一般的需求,因為它語法簡明,容易維護,有很多模組可用,而且容易做出圖形介面。但它并不是 object oriented 并不純,速度也較 Perl 慢一些。
- Tcl/Tk 基本變數形態只有文字串,每次算術都是從文字變數字再變文字,鳴,沒什么好提的了吧。
- Java 太偉大了,我可不想每次開始寫程式時都幻想要完成一個跨企業的解決方案,引入幾十個標頭檔,寫完了才明白原來我只需它讀一個用戶指定的文件,畫兩條直線就行了。唉,落差太大。
- Ruby 太新了,要正式應用是將來的事。
但事實上我個人的感受最深的是它比較好玩的說法。雖然像是不認真,但一種可以讓人寓編程于娛樂的程式語言,正是程式語言的設計終極嘛。
Python 的作者是數學家,而 Perl 的作者則是個天才程式員。因此這兩種語言的風格回異:Python 語法鋪排的很整潔,相同功能的程式由不同人寫出來的樣子都很像,這些一致的、前后呼應的程式對于系統的拓展和整合十分重要。因此閱讀 Python 的程式感覺上很暢順。Perl 的語法則很濃縮,而且經常會有些意想不到的巧思,可惜這些每每體現在字里行間的妙著對整個程式的可讀性帶來負面影響。因而一個短小的 Perl 程式往往令人愛不釋手,但當它越來越長時總會變成程式員的永痛。
至于PHP,因它的發展歷史一直是圍繞著 web page,所以做網頁設計是十分方便的,但是寫一般的工作則平平無奇。比如說控制執行緒,處理進程間的訊息傳送以致做圖形用戶介面等都久奉,這是因為從 WEB 的角度,這些并不重要:圖形介面,HTML 就己經是了,而程式的執行和互相合作則是 Web Server 要考慮的事。
我推薦 Python 是因為我覺得它比較適合用作一般性程式編寫和系統整合,尤其是在科學和教育領域中。我并不是說大家沒本事學好 Perl,只是很多時候我們并不需要用到 Perl 的精妙之處,更多的時候用一個清楚直接的描述要比用一個智力題級的招數更有好處。除了語法的設計較為整潔外,Python 還有很好的對電腦圖形的支援,也有十分快的數學陣列模組。
而它最方便的地方是很容易的把其他的程式整合在一起,譬如說你有個幾年前寫的 C 程式,只要修改很小的一部份就可以編譯成 Python 可用的模組。事實上已經有自動幫你做這些修改的程式了,人們也己為許多各種好用的函式庫做出了 Python binding,如 OpenGL、GTK、QT、GD、甚至于解方程組的、找頻譜的都有。
而在使用了一段時間后,我開始體會下面的說法:
雖然它們各自都有類似的功能,但在使用時會發現 Python 的寫法總是較為一致,這是因為 Python 從一開始便考慮了它整個的架構。相反,像 Perl 或 PHP 則有很多功能都是后來慢慢加上去的,所以到后期 Perl 的發展越來越難,以致 Perl 6 幾乎要從頭設計。而 PHP 則現在才開始頭痛于構思新的函數名稱 (所有的 PHP 函數都是全域定義的,所以每加一個函數都有可能和已經定義了的名字重復)。為了解決問題,它們各自都開始注意加強 class, object 的支援。但很明顯的是,在程式成熟后再加這些基本功能會令整個語言的框架變得頭重腳輕,無論是寫起來還是用起來都有些不穩的感覺。
然而 Python 在一開始的時候就把這些考慮了進去:Python 根本就是以物件導向作為設計的基礎。因此在加了許許多多的功能和模組后,它的風采仍舊,清新依然。
好話說了不少,光說不練可是不行。參考程式示范區的實際例子,看看 Python 到底是怎樣一回事。