天天看點

《Python核心程式設計(第二版)》——1.7 比較Python(Python與其他語言的比較)

本節書摘來自異步社群《python核心程式設計(第二版)》一書中的第1章,第1.7節,作者[美]wesley j. chun,宋吉廣 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

python已經和很多語言比較過了。一個原因就是python提供了很多其他語言擁有的特性,另外一個原因就是python本身也是由諸多其他語言發展而來的,包括abc、modula-3、c、c++、algol-68、smalltalk、unix shell和其他的腳本語言,等等。python就是“濃縮的精華”:van rossum研究過很多語言,從中吸收了許多覺得不錯的特性,并将它們溶于一爐。

然而,往往因為python是一門解釋型語言,你會發現大多數的比較是在perl、java、tcl,還有javascript之間進行的。perl是另外一種腳本語言,遠遠超越了标準的shell腳本。像python一樣,perl賦予了你所有程式設計語言的功能特性,還有系統調用能力。

perl最大的優勢在于它的字元串模式比對能力,其提供了一個十分強大的正規表達式比對引擎。這使得perl實際上成為了一種用于過濾、識别和抽取字元串文本的語言,而且它一直是開發web 伺服器端cgi(common gateway interface,通用網關接口)網絡程式的最流行的語言。python的正規表達式引擎很大程度上是基于perl的。

然而,perl語言的晦澀和對符号文法的過度使用,讓解讀變得很困難。這些文法令初學者不得精要,為他們的學習帶來了不小的阻礙。perl的這些額外的“特色”使得完成同一個任務會有多個方法,進而引起了開發者之間的分歧。最後,通常當你想閱讀幾個月前寫的perl腳本的時候都不得不求助參考書。

python也經常被拿來和java作對比,因為他們都有類似的面向對象的特性和文法。java的文法盡管比c++簡單的多,但是依舊有些繁瑣,尤其是當你想完成一個小任務的時候。python的簡潔與純粹使用java相比提供了更加快速的開發環境。在python和java的關系上,一個非常重大的革命就是jython的開發。jython是一個完全用java開發的python解釋器,現在可以在隻有java虛拟機的環境中運作python程式。我們會在後面的章節中簡單講述jython的更多優點,但是現在就可以告訴你:在jython的腳本環境中,你可以熟練地處理java對象,java可以和python對象進行互動,你可以通路自己的java标準類庫,就如同java一直是python環境的一部分一樣。

現在,由于rails項目的流行,python也經常被拿來和ruby進行比較。就像前面我們提到的,python是多種程式設計範式的混合,它不像ruby那樣完全面向對象,也沒有像smalltalk那樣的塊,或許這正是ruby最引人注目的特性。python有一個位元組碼解釋器,而ruby沒有。python更加易讀,而ruby事實上可以看作是面向對象的perl。相對于rails,python有幾個自己的web應用架構,比如django和turbogears這兩個項目。

tcl是另一種可以與python相提并論的腳本語言。tcl是最易于使用的腳本語言之一,程式員很容易像通路系統調用一樣對tcl語言進行擴充。tcl直到今天仍然很流行,與python相比,它或許有更多局限性(主要是因為它有限的幾種資料類型),不過它也擁有和python一樣的通過擴充超越其原始設計的能力。更重要的是,tcl通常總是和它的圖形工具包tk一起工作,一起協同開發圖形使用者界面應用程式。因為它非常流行,是以tk已經被移植到perl(perl/tk)和python(tkinter)中。同樣有一個有争議的觀點,那就是與tcl相比,因為python有類、子產品及包的機制,是以寫起大程式來更加得心應手。

python有一點點函數化程式設計(functional programming ,fp)結構,這使得它有點類似于list或scheme語言。盡管python不是傳統的函數化程式設計語言,但它持續地從lisp和haskell語言中借用一些有價值的特性。舉例來說,清單解析就是一個廣受歡迎的來自haskell的特性,而lisp程式員在遇到lambda、map、filter和reduce時也會感到異常親切。

javascript 是另外一種非常類似python的面向對象腳本語言。優秀的javascript程式員學起python來易如反掌。 聰慧的讀者會注意到javascript是基于原型系統的,而python則遵循傳統的面向對象系統,這使得二者的類和對象有一些差異。

下面列出了有關python與其他語言進行比較的網頁。

perl

<a href="http://www2.linuxjournal.com/article/3882">http://www2.linuxjournal.com/article/3882</a>

<a href="http://aplawrence.com/unixart/pythonvsperl.html">http://aplawrence.com/unixart/pythonvsperl.html</a>

<a href="http://pleac.sf.net/pleac_python">http://pleac.sf.net/pleac_python</a>

<a href="http://www.garshol.priv.no/download/text/perl.html">http://www.garshol.priv.no/download/text/perl.html</a>

java

<a href="http://dirtsimple.org/2004/12/python-is-not-java.html">http://dirtsimple.org/2004/12/python-is-not-java.html</a>

<a href="http://twistedmatrix.com/users/glyph/rant/python-vs-java.html">http://twistedmatrix.com/users/glyph/rant/python-vs-java.html</a>

<a href="http://netpub.cstudies.ubc.ca/oleary/python/python_java_comparison.php">http://netpub.cstudies.ubc.ca/oleary/python/python_java_comparison.php</a>

lisp

<a href="http://norvig.com/python-lisp.html">http://norvig.com/python-lisp.html</a>

ruby

<a href="http://blog.ianbicking.org/ruby-python-power.html">http://blog.ianbicking.org/ruby-python-power.html</a>

<a href="http://dev.rubycentral.com/faq/rubyfaq-2.html">http://dev.rubycentral.com/faq/rubyfaq-2.html</a>

perl、c++

<a href="http://strombergers.com/python/">http://strombergers.com/python/</a>

perl、java、c++

c++、java、ruby

<a href="http://dmh2000.com/cjpr">http://dmh2000.com/cjpr</a>

perl, java, php, tcl

<a href="http://www-128.ibm.com/developerworks/linux/library/l-python101.html">http://www-128.ibm.com/developerworks/linux/library/l-python101.html</a>

<a href="http://www-128.ibm.com/developerworks/linux/library/l-script-survey/">http://www-128.ibm.com/developerworks/linux/library/l-script-survey/</a>

c、c++、java、perl、rexx、tcl

<a href="http://www.ubka.uni-karlsruhe.de/indexer-vvv/ira/2000/5">http://www.ubka.uni-karlsruhe.de/indexer-vvv/ira/2000/5</a>

你可以在下面的網址中看到更多python與其他的語言的比較:

<a href="http://www.python.org/doc/comparisons.html">http://www.python.org/doc/comparisons.html</a>