文章目錄
- ◇更高層次的抽象和封裝
- ◇更少的代碼量
- ◇更好的可讀性
- ◇更平緩的學習曲線
- ◇支援互動式
- ◇通用性(跨領域)
- ◇人氣夠旺
- ◇功能夠強、庫夠豐富
- ◇跨平台
- ◇和其它語言的整合、互動
俺竊以為,Python的所有特徵中,作為指令碼語言(具體定義參見“這裡”)是它的首要特徵。因此,在本系列文章中,俺首先來忽悠一下Python作為指令碼語言,有些啥好處?
★指令碼語言好在哪?
要聊Python作為指令碼語言的好處,首先得說說指令碼語言自身有哪些優點。一般來說,當我們提及“指令碼語言”,都是強調其解釋執行的特性(雖然有些指令碼語言也支援編譯)。所以,後面陳述的這些優點,大都是拿編譯型語言來進行對比。
◇更高層次的抽象和封裝
大部分指令碼語言都提供了比較高層次的抽象和封裝。像很多指令碼語言都內建了字串處理能力以及Regex(典型代表就是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和其它指令碼語言的比較
有同學可能要問了,指令碼語言有很多,為啥俺獨獨青睞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運行環境)。
◇和其它語言的整合、互動
最後這一點,估計大多數同學不會太關心。俺因為要在公司的產品中引入指令碼技術,所以俺還得考慮該指令碼語言和其它語言的整合能力。整合能力強的指令碼語言,可以作為複雜系統中的膠水,用來把不同模組粘合在一起(關於Glue Language,可以參見“這裡”)。
在這方面,Python和Ruby的表現都不錯。它們和Java的整合有Jython、JRuby;和dotNet平台的整合有IronPython、IronRuby。至於俺常用的C++,Python整合得比Ruby好。比如C++社區大名鼎鼎的Boost庫裡面,就有一個Boost.Python的子庫(見“這裡”)。關於Python如何用作膠水,俺會在後續的文章“作為膠合語言的Python”中會詳細介紹。
★總結
基於上述幾個方面的考慮,俺最終選擇了Python作為日常使用的指令碼工具,並把它引入到公司的產品中,作為模組之間的膠合劑。
囉嗦完Python作為指令碼語言的方方面面,下一個文章,咱來聊一下它作為動態語言的那些事兒。
回到本系列的目錄
著作權聲明
本部落格所有的原創文章,作者皆保留著作權。轉載必須包含本聲明,保持本文完整,並以超連結形式註明作者編程隨想和本文原始地址:
http://program-think.blogspot.com/2009/08/why-choose-python-1-script.html