06.04 為什麼俺推薦Python「1」:作為腳本語言的Python

俺竊以為,Python的所有特徵中,作為腳本語言

是它的首要特徵。因此,在本系列帖子中,俺首先來忽悠一下Python作為腳本語言,有些啥好處?

★腳本語言好在哪?

要聊Python作為腳本語言的好處,首先得說說腳本語言自身有哪些優點。一般來說,當我們提及“腳本語言”,都是強調其解釋執行的特性(雖然有些腳本語言也支持編譯)。所以,後面陳述的這些優點,大都是拿編譯型語言來進行對比。

◇更高層次的抽象和封裝

大部分腳本語言都提供了比較高層次的抽象和封裝。像很多腳本語言都內置了字符串處理能力以及正則表達式(典型代表就是Perl)。還有很多腳本語言都內置了高級的數據結構。比如Python在語言層面支持了鏈表(Python的術語叫List)、映射(Python的術語叫Dict)、元組(Python的術語叫Tuple)。

有了這些高層次的封裝,你寫起代碼來,就特別滴簡單、特別滴爽。比如,在Python中要把一個List翻倍,只需這麼寫:[1,2,3] * 2 就得到 [1,2,3,1,2,3]

◇更少的代碼量

得益於高層次的封裝,在完成相同功能的前提下,腳本語言的代碼量會比編譯型語言少很多。

比如說,要打印出某個文本文件的內容,如果用Java實現,正常的寫法大概要七、八行代碼(把所有代碼硬擠到一行的,不予討論);用Python也就三、五行。

再比如說,抓取給定URL的web網頁,用Python自帶的標準庫實現,大概3-5行代碼;但如果用C++實現,代碼量會增加許多(具體要寫多少代碼,取決於你用的http庫)。

代碼量少了之後,至少你看代碼的時候(無論是看自個兒滴還是看別人滴),能少敲很多次翻頁鍵,大大延長了鍵盤的壽命,順便降低了手指頭的勞損。

◇更好的可讀性

當然啦,延長鍵盤壽命還不是關鍵,關鍵在於——代碼量少了之後,(通常情況下)會有助於提高可讀性。而可讀性恰恰是Python的強項之一。

比方說:Python在語法層面強制約定了作用域縮進(這是俺很喜歡Python的地方之一)。如此一來,即便是新手程序猿寫出的Python代碼,縮進風格也很統一。反觀C或C++的新手,寫出的代碼就沒有這麼整齊了。

◇更平緩的學習曲線

通常,腳本語言的語法都比較簡單、傻瓜化。因此,入門也就容易很多。稍微有一些編程基礎的人,就能夠在短時間內上手。

比如俺手下的C++、Java程序員,以及某些測試人員,都可以在一週內(程序員用不著一週,一般就1、2天)掌握Python的語法並用來寫一些輔助的小工具。大大減少了俺培訓的口水。

◇支持交互式

很多腳本語言的IDE支持交互式寫代碼。也就是說,你每寫完一行代碼,解釋器就執行一把。這樣能很快發現輸入錯誤,而且還可以立即看到執行結果。

★腳本語言有啥缺點?

前面說了那麼多優點,那腳本語言有啥缺點捏?主要的缺點就是性能差。這是他們為上述優點所付出的沉重代價。所幸當今的計算機硬件突飛猛進,性能差的缺點已經越來越不明顯了。

為什麼俺推薦Python「1」:作為腳本語言的Python

★Python和其它腳本語言的比較

有同學可能要問了,腳本語言有很多,為啥俺獨獨青睞Python捏?為了回答這個問題,俺拿Python和一些常見的腳本語言作一些膚淺的比較。

鑑於後面的內容極易引發語言的口水戰,俺特此聲明:雖然接下來會提及某些語言相對於python的缺點,但俺絕無貶低這些語言的企圖,也無意證明python比這些語言優秀!只是陳述一下俺當初是如何在幾種腳本語言中進行取捨的?

除了Python之外,常見的腳本語言還有很多,比如:PHP、JavaScript(以下簡稱JS)、Perl、VBScript(以下簡稱VBS)、Ruby、Bash、Lua、Tcl(可別誤以為是某家電廠商:-)......Python是如何從這些腳本語言中脫穎而出的捏?俺挑選的時候,主要考慮瞭如下幾點:

◇通用性(跨領域)

因為俺懶得學太多編程語言。所以,俺希望熟悉一門腳本語言之後,能夠儘量多幫俺搞定不同領域的事兒。從這點來看,俺就不會選擇PHP(太偏重於Web服務端)、JS(太偏重於Web客戶端)、諸如Bash之類的Shell腳本(太偏重於系統管理)。

而Python則屬於通用的腳本語言,覆蓋範圍很廣。比如Web開發、桌面GUI應用、系統管理、網絡應用等許多領域,Python都可以輕易搞定。

◇人氣夠旺

關於“人氣”的重要性,俺在“如何選擇開源項目”中,有介紹過。人氣越高、越流行,就意味著更多的資源(包括文檔、相關軟件),當你碰到問題需要解決,也有更多的人可以諮詢。

關於編程語言的流行程度,可以大致參考TIOBE的排名(雖然TIOBE不能全面反映流行程度,但至少可作為某種參考)。

像Tcl、PowerShell、Groovy、JavaFX等都排在30名之外(截至到09年8月),感覺用的人少,俺暫時不予考慮。而Python最近幾年的排名則一路上升(請看“這裡”),截止到09年8月,已經高踞排行榜第6位。Perl雖然也身居高位,但是最近幾年的排名一路下滑(請看“這裡”)。俺個人認為,其人氣不容樂觀。

◇功能夠強、庫夠豐富

另一個俺很看重的地方是功能是否夠強大。在這點上,Python和Perl都算是比較強悍的。關於Python如何強悍,俺會在後續的帖子“作為瑞士軍刀的Python”中加以介紹。

反觀JS、Ruby、Tcl等語言,則稍顯不足(當然,也有可能俺孤陋寡聞)。

◇跨平臺

由於俺平時會使用不同的操作系統,再加上俺負責的產品也是跨平臺的。所以,俺對腳本語言有跨平臺的要求。說到跨平臺,諸如VBS、Bash之流就不予考慮了。

其實,很多腳本語言都支持跨平臺。而Python在這方面,更為出眾。不光支持主流的操作系統,還支持一些冷門的(比如古老的DOS),還支持手持設備(俺的智能手機就可以裝Python運行環境)。

為什麼俺推薦Python「1」:作為腳本語言的Python

◇和其它語言的整合、交互

最後這一點,估計大多數同學不會太關心。俺因為要在公司的產品中引入腳本技術,所以俺還得考慮該腳本語言和其它語言的整合能力。整合能力強的腳本語言,可以作為複雜系統中的膠水,用來把不同模塊粘合在一起(關於Glue Language,可以參見“這裡”)。

在這方面,Python和Ruby的表現都不錯。它們和Java的整合有Jython、JRuby;和dotNet平臺的整合有IronPython、IronRuby。至於俺常用的C++,Python整合得比Ruby好。比如C++社區大名鼎鼎的Boost庫裡面,就有一個Boost.Python的子庫(見“這裡”)。關於Python如何用作膠水,俺會在後續的帖子“作為膠合語言的Python”中會詳細介紹。

★總結

基於上述幾個方面的考慮,俺最終選擇了Python作為日常使用的腳本工具,並把它引入到公司的產品中,作為模塊之間的膠合劑。

囉嗦完Python作為腳本語言的方方面面,下一個帖子,咱來聊一下它作為動態語言的那些事兒。


分享到:


相關文章: