Python是一種程式設計語言,它的名字來源於一個喜劇。也許最初設計Python這種語言的人並沒有想到今天Python會在工業和科研上獲得如此廣泛的使用。
Python是什麼(轉載自Primus)
著名的自由軟體作者Eric Raymond在他的文章《如何成為一名駭客》中,將Python列為駭客應當學習的四種程式設計語言之一,並建議人們從Python開始學習編程。這的確是一個中肯的建議,對於那些從來沒有學習過編程或者並非電腦專業的編程學習者而言,Python是最好的選擇之一。
Python
第一次學習Python,我只用了不到二十分鐘的時間,站在書店裡把一本教初學編程的人學習Python的書翻了一遍。也是從那時起,我開始被這種神奇的語言吸引。
易用與速度的完美結合
Python是一種用起來很方便的語言,很多初學Java的人都會被Java的CLASSPATH搞得暈頭轉向,花上半天的時間才搞明白原來是CLASSPATH搞錯了自己的Hello World才沒法運行。用Python就不會有這種問題,只要裝上就能直接用。
Python是一種指令碼語言,寫好了就可以直接運行,省去了編譯連結的麻煩,對於需要多動手實踐的初學者而言,也就是少了出錯的機會。而且Python還有一種互動的方式,如果是一段簡單的小程式,連編輯器都可以省了,直接敲進去就能運行。
Python是一種清晰的語言,用縮排來表示程式的嵌套關係可謂是一種創舉,把過去軟性的編程風格升級為硬性的文法規定。再不需要在不同的風格間選擇、再不需要為不同的風格爭執。與Perl不同,Python中沒有各種隱晦的縮寫,不需要去強記各種奇怪的符號的含義。Python寫的程式很容易懂,這是不少人的共識。
Python是一種物件導向的語言,但它的物件導向卻不象C++那樣強調概念,而是更注重實用。不是為了體現對概念的完整支援而把語言搞得很複雜,而是用最簡單的方法讓編程者能夠享受到物件導向帶來的好處,這正是Python能像Java、C#那樣吸引眾多支援者的原因之一。
Python是一種功能豐富的語言,它擁有一個強大的基本類庫和數量眾多的第三方擴充,使得Python程式員無需去羨慕Java的JDK。Python為程式員提供了豐富的準系統使得人們寫程式時用不著一切最底層做起。
說到這裡,人們通常會用一種擔心:指令碼語言通常很慢。指令碼語言從啟動並執行速度講的確會慢一些,但Python的速度卻比人們想象得快很多。
雖然Python是一種指令碼語言,但實際上也可以對它進行編譯,就象編譯Java程式一樣將Python程式編譯為一種特殊的ByteCode,在程式運行時,執行的是ByteCode,省去了對程式文本的分析解釋,速度自然提升很多。
在用Java編程是,人們崇尚一種Pure Java的方式,除了虛擬機器一切東西都用Java編寫,無論是基本的資料結構還是圖形介面,而Pure Java的SWING,卻成為無數Java應用開發人員的噩夢。Python崇尚的是實用,它的整體環境是用C來編寫的,很多基本的功能和擴充的模組都是用C/C++來編寫的,當執行這一部分代碼時,它的速度就是C的速度。用Python編寫的普通傳統型程式,其啟動運行速度與用C寫的程式差別不大。
除了這些,通過一些第三方軟體包,用Python編寫的原始碼還可以以類似JIT的方式運行,而這可以大大提高Python代碼的運行速度,針對不同類型的代碼,會有2倍至100倍不等的速度提升。
Python是我見到過的語言中,在易用性和速度上結合的最完美的一個,通過喪失一點點經常可以忽略不計的運行速度從而獲得更高的編程效率,這就是我選擇Python的原因。
把精力放在要解決的問題上
選擇一種合適的語言,才能讓你把有限的精力放到最需要解決的問題上。不同的語言有不同的作用,C和彙編適合編寫系統軟體,如果用它們來編寫公司專屬應用程式,恐怕沒幾個人能得心應手。我以前就碰到一個用彙編寫資料庫程式的哥,雖然最基本的功能完成了,但要增加個報表預覽什麼的,他就沒法應付了。聰明的程式員是用合適的工具去完成任務,想找一把萬能鑰匙是不太可能的。
Python的自動的記憶體回收機制是進階的程式設計語言的一種基本特性,用擁有這一功能的語言編程,程式員們通常不用去關心記憶體流失的問題,而當我們用C/C++寫程式時,這卻是最重要的需要認真考慮卻又很容易出錯的問題之一。
資料結構是程式構成的重要部分,鏈表、樹、圖這些在用C編程時需要仔細表達的問題在Python中簡單了很多。在Python中,最基本的資料結構就是數組、序列和雜湊表,用它們想要表達各種常見的資料結構是非常容易的。沒了定義指標、分配記憶體的任務,編程變得有趣了。
CORBA是一種進階的軟體體繫結構,它是語言無關平台無關的。C++、Java等語言都有CORBA綁定,但與它們相比,Python的CORBA綁定卻容易很多,因為在程式員看來,一個CORBA的類和Python的類用起來以及實現起來並沒有什麼差別。沒了複雜體繫結構的困擾,用Python編寫CORBA程式也變得容易了。
好鋼要用在刀刃上,要想用有限的時間完成盡量多的任務,就要把各種無關的問題拋棄,而Python恰恰提供了這種方法。
跨平台又易擴充
隨著Linux的不斷成熟,越來越多的人轉到Linux平台上工作,軟體的開發人員自然就希望自己編寫的軟體可以在所有平台下運行。Java一次編寫處處啟動並執行口號使它成為跨平台的開發工具的典範,但其運行速度卻不被人們看好。實際上,幾乎所有的著名指令碼語言都是跨平台的,Python也不例外。Python不僅支援各種Linux/Unix系統,還支援Windows,甚至在Palm上都可以運行Python的程式。
一個程式想要跨平台工作,不僅僅需要語言本身能夠做到在平台之間相容,在圖形化介面的時代,還需要有能跨平台工作的Widget。Python不僅支援老一些的TK,還支援新的GTK+、QT以及wxWidget,而這些Widgets都可以在多個平台上工作。通過它們,程式員就可以編寫出漂亮的跨平台GUI程式。
Python通常是運行在native代碼與指令碼代碼之間,程式員可以用C/C++為Python編寫各種各樣的模組,這不僅可以讓程式員以Python的方式使用系統的各種服務及用C/C++編寫的優秀函數庫和類庫,還可以大幅度提高Python程式的速度。
用C/C++編寫Python的模組並不複雜,而且為了簡化這一工作,人們還製作了不少工具用來協助這一工作。正是因為如此,現在各種常用的函數庫和類庫都有Python語言的綁定,用Python可以做到的事情越來越多了。
萬能鑰匙?
Python功能強大,但它卻不是萬能的。如果你要編寫作業系統或驅動程式,很顯然,Python是做不到的。要寫軟體,沒有哪個工具是萬能的,現在之所以有那麼多的程式設計語言,就是因為不同的語言適合做不同的事情。因此,選擇適合自己的語言工具是最重要的。