首頁  >  文章  >  後端開發  >  比較python和ruby

比較python和ruby

巴扎黑
巴扎黑原創
2017-09-15 10:47:581450瀏覽

本文給大家對比了下python和Ruby的異同以及各自的優缺點等,向大家展示了python與Ruby的資源以及學習曲線,非常適合在此兩種語言中猶豫不決的小伙伴,希望大家能夠喜歡

最近在考慮學習一門後端語言,在ruby和python直接猶豫,然後自己做了一些對比,希望能幫到有同樣問題的你。

一、異同對比選擇

1、Python和ruby的相同點:
•都強調語法簡單,都具有更一般的表達方式。 python是縮進,ruby是類basic的表達。都大量減少了符號。
•都是動態資料型別。都是有豐富的資料結構。
•都具有C語言擴展能力,都具有可移植性,比perl的可移植性更好。也都可以作為嵌入語言。
•都是物件導向的語言,都可以作為大專案的開發工具。
•都有豐富的函式庫支援。
•也有最寬鬆的版權許可,除了一些工具屬於GNU世界。
•都有lisp特色的eval函數,也都能把函數當作參數。
•也有圖形介面的ruby的專門編輯器。
•都獲得了廣泛的c庫的支持。如qt、gtk、tk、SDL、FOX等,ruby計畫實現SWIG介面。
•都有完善的文件。

2、和python比較ruby的優點:
•具有正規表示式和嵌入html的功能。 python也有正規表示式,但沒有ruby的應用方便和廣泛。 python的嵌入html計畫才剛起步。 ruby還有apache的mod模組。 ruby本身也實現和很多unix工具,如racc,doctools。比python更親近Linux。
•比python功能更完整的物件導向的語法。
•ruby的整個函式庫都是具有類別繼承的結構。
•他的基本的資料型別和運算子都是可以重載的。
•ruby主要的功能都是透過物件的方法呼叫來實現的,而不是函數。 python也在向這方面發展,但沒有ruby做的徹底。
•ruby的類別是更規範的單繼承,還有介面等概念的實作。
•python可以實現在列表內的條件語句、循環語句,而ruby用「塊」的方式來實現這個功能,比python的更靈活,更具有通用性。
•ruby具有類似lisp的徹底的函數方式的條件語句、迴圈語句等。語句的表達能力較強。
•附帶一些unix工具,如racc等。

3、和python相比ruby的不足:
•最大的不足正是因為ruby的強大所引起的。它沒有python的簡單性好。比較複雜的物件導向語法、「區塊」語法的引入、正規表示式的引入、一些簡寫標記都增加了語言的複雜性。
•python的縮排表達方式比ruby的basic的表達方式更讓人悅目,ruby程式的滿眼的end讓人不舒服。當然,ruby認為end的方式比python更先進。
•ruby還沒有python的「自省」的能力,沒有從程式檔案產生文件的能力。
•ruby沒有國際化的支持。國際化支持在ruby的計劃中。這是因為ruby的歷史比python短造成的。
•ruby沒有類似jython的東西。

4、python和ruby的語言的選擇:

從簡單的就是好的來說,選python是沒錯的。 python適合尋找簡單語言的人,這很可能造成python更流行,因此也有更多的支持。但如果要追求更強大的語法功能,則ruby是好的選擇。因為ruby和python的哲學有很多相似的地方,先從python入手,盡量用python,如果python的能力不足了,可以在找ruby。

ruby和python的比較,就像五筆和拼音輸入法的比較。拼音作為入門的輸入法和長久使用的輸入法都沒有問題。五筆適合更高要求的情況。如果追求性能的不妨學學ruby。對程式語言有興趣,想了解各種程式設計概念的學ruby也會很興奮。

二、兩者各有特點:

1、Python從語法來說更質樸一些,而Ruby更性感一些

Python的語法相對其他腳本語言來說,沒有太多花巧的地方,顯得比較死板一點,其實從Python強製程式碼縮排也可以看出來Guido設計語言的取向。語法死板的一面就是不容易玩出來更性感的東西,比方說Rails這樣的框架,另外Python也無法做DSL這樣的事情,但是語法死板的另一面就是比較規範,相對來說,更加適應軟體開發的工程性要求,更容易組織大規模的團隊進行開發。

Ruby的語法非常靈活,Matz設計ruby的出發點也是為了coding for fun,因此可以用ruby玩出來很多花樣,運用足夠的技巧,可以用Ruby寫出來逼近自然語言的DSL,對於程序員來說,玩ruby確實充滿了樂趣。 Rails能在ruby社群中誕生,而不是Python社群誕生絕對和程式語言有直接的關係。不過ruby語法靈活的另一面就是程式設計實現風格的多樣性,這對大規模團隊的協作和管理來說是一項挑戰。

2、Python的解析器實現更成熟,第三方函式庫品質高

Ruby1.9解析器儘管已經有了很大的性能提升和很多新的功能,但是從源代碼實現的角度來說,基本上是通過在Ruby1.8源代碼上打patch來增加功能的。從原始碼的結構來說,Ruby的實作太古老了,Ruby擴充起來比較困難,只能不斷打patch。這也是為什麼現在Ruby社群湧現這麼多新的Ruby解析器實作的原因。從很大程度上來說,這限制了Ruby的發展速度。相對而言,Python解析器較成熟,也較穩定。

在第三方類別庫的數量上來說,Ruby並不比Python少,但是高性能高品質久經考驗的第三方類庫Python要明顯比Ruby多,事實上很多Ruby的第三方類庫都不太成熟,因此這也很大程度上限制了Ruby的發展。

3、Python的應用領域非常廣泛,而Ruby目前主要局限在在Web領域

Python應用的領域非常廣泛,除了web開發以外,還被廣泛用在伺服器後端的高效能伺服器實現,伺服器後端的各種密集運算,全文檢索,各種文字處理,系統管理等等,另外桌面應用領域wxPython也是一個很成熟的跨平台GUI框架。對於某些特殊的應用,比方說呼叫作業系統核心API,Python也可以完成的很好,比方說大量小檔案的即時同步方案,就是用Python直接呼叫linuxKernel的inotify特性來實現的。所以可以說Python是軟體開發領域的瑞士軍刀,什麼事情都可以做。

正是由於Ruby解析器和Ruby類別函式庫的限制,Ruby的應用主要侷限在Web開發領域,目前Ruby的應用還無法延伸到web開發領域以外的許多地方。據說豆瓣早期就考慮過Ruby on Rails,但因為Ruby不能做其他事情,而Python可以大包大攬,最後放棄Ruby選擇了Python。

4、在Web領域Ruby是王者

隨著網路應用更進一步滲透到軟體開發的各個領域,其實web開發佔整個軟體產業開發的比重也是越來越大。儘管Ruby在其他領域很受制約,但是在Web開發領域就是絕對的王者了。 Rails框架的領先程度已經遠遠甩開了任何一個潛在的競爭對手十萬八千里。因此儘管Ruby可能有這樣那樣的問題,但說到Web開發,Rails幾乎就是無可爭議的唯一選擇。

而Python儘管十分全面,卻偏偏在web開發領域不彰,web框架雖然眾多,卻沒有一個真正可以挑大樑,Django雖然在Python社群比較流行,但很多方面也有缺陷。現在的網路應用往往都是多種語言混合編程,Ruby在Web以外的缺陷也可以用其他語言來彌補。

5、Python的套件管理不如Ruby

儘管Python的第三方類別庫更高品質更成熟,但是Python社群缺乏Ruby Gem這樣一個良好的套件管理軟體和套件發布的網站。因此應用的建構顯得不如Ruby那麼方便,那麼人性化。特別是在類別庫的版本升級上,就會遇到很多麻煩,不如Ruby Gem那麼簡單。

不過總的來說,Python和Ruby還是相似度極高的兩種程式語言,即使兩種程式語言都學習一下也不會浪費太多時間。如果我個人選擇的話,會首選用Rails來建立web應用,再根據情況選擇Python或Java處理一些伺服器後端的運算。總之,未來還是一個混合程式設計的時代,我們需要多了解一些程式設計工具,然後根據需要看菜吃飯才行。

三、《ruby和python的比較》之更正

1、文件、開源專案、函式庫支持,這些東西Ruby不要跟Python比,不是幾個數量級的問題,何必貌似並列的排在一起。

2、Python確實沒有把正規表示式模組內建到核心裡面,但是卻有re這個標準函式庫的支持,當時的目的也是為了盡可能的把核心做到最小。我不太明白,使用標準庫和內建有什麼區別,甚至可以作為優點?而使用Python中的正規表示式也不過是多個import

re和呼叫時的幾個字母而已,省下的無數個end足以抵銷這個問題了。

3、至於嵌入HTML功能,Python裡有C/Python雙實現的Cheetah模板可用,據說托Zope的福,美國海軍和法國政府在用,不知Ruby這個功能的成熟度如何?

4、mod_ruby模組的出現時間很短,如果作者沒有聽過mod_python那就實在孤陋寡聞了。我在一年前翻譯mod_python3.2.8文件的時候,mod_python已經很成熟了,以至於幾乎所有的Python

WEB框架都支持構建在其上來提高效率。但是,似乎mod_ruby的更新,每年也只有幾次。 mod_python更有gnu.org這樣的重量級應用,不知mod_ruby有沒有?

5、另外,提到unix工具。 Red hat

Linux的安裝程式一直是用Python寫的,如果你剛好用ubuntu,那麼,那個提示你更新系統的程序,也是用Python寫的。

6、racc和doctools,請原諒我的孤陋寡聞,我google了一下居然除了你的這篇文章還沒找到幾篇關於racc的中文內容,輾轉之後才查到是一種類似yacc的工具。從google的角度講,racc的可用性我就不多說了。我不太明白一個yacc工具在日常編程當中有多大的實用性,但是既然作者提到了我就順便找了個我只聽說過名字,根本沒用過的Spark。 google的結果是”racc

ruby”:”python

spark”=159,000:659,000。至於doctools,我更是無話可說,在google上只有15,800筆記錄,我到現在都看不出這個東西是做什麼用的。所以找了個估計是類似的東西比較了一下,docutils,google的紀錄是25,400條。

7、「比Python函式庫更完整的物件導向語法」。試問面向對象的目的是什麼?再者,ruby能否像Python一樣,絕大多數標準庫根本不需要查文檔,只要猜測一下大體上的名字,然後dir()一下,再help()一下就可以直接上手,用到第二次的時候,因為模組內東西實在太少,記憶太方便,就可以直接寫出來的地步?另外,物件導向既不是什麼銀彈,也不是最先進的軟體工程思想。

8、”ruby的整個庫都是類繼承結構的”,個人認為是Java的糟粕,反倒是當成寶學過來了。或許這也是ruby來拯救Java程式設計師的優勢吧。

9、”基本資料型別和運算子都是可以重載的”,這個不是太清楚,不知Python中重載__add__之類的算不算。

10、”ruby主要的功能都是透過物件的方法呼叫來實現的,而不是函數”,Python中所有的東西都是對象,但並不都是類,不知這句話還有什麼意義。另外,推薦你不要太追求什麼徹底,還是實用這個詞比較有吸引力。

11、Python沒有嚴格要求單繼承是給程式設計師彈性。另外,關於接口,Python中只要定義了同名的函數就算是具有了相同的接口,玄學上升到了這個高度,我也有些迷糊了。至於接口,不要那麼有自信,ruby的所謂接口也不過是個mix-in。這個東西Python的幾個大專案中也有實現,只是因為對Python意義不明顯,所以才沒有更多的使用。

12、關於lisp的函數式編程,Python中有很多內建支持,如map、zip、filter等等,當然還有lambda。不要說支持,我們談實用。 Pythoner中尚且有些人認為函數式程式設計影響了程式碼可讀性而盡量避免呢。所以,你認為支持什麼東西之前,先想好這樣東西算不算是好東西。

13、」最大的缺點正是因為ruby的強大所引起的」。這句真噁心,不予評論。

14、呵呵,ruby居然沒有國際化支持,真是個笑話,不知道當初那個小日本怎麼想的?難道他英文過了四級?

15、至於jython,現在也有了jruby,可能是作者的原文比較早的緣故吧。 Python也有很多種實現,像是jython,ironpython, pypy,pyrex等等。 Python的優秀其實不一定要用其他語言來實現才能體現出來。當然更不要說寄望要Java來解救水深火熱中的ruby了。

另外麼,有些ruby的缺點不要迴避:

16、ruby沒有本地化線程,而是用的偽線程,根本無法利用多核心CPU的優勢。 CPython使用了本地化線程,但因為使用了GIL所以也是無法利用多核心CPU優勢的。但是Stackless的出現完全可以解決這個問題,而stackless更是將Python提高到了平行運算的高度,這個高度的競爭對手可以是Erlang,ruby自然不必窺探。其中的超輕量線程技術可以確保一台很爛的機器上跑幾十萬的線程還很輕鬆。基於Twisted的非同步程式設計方式也提供了一個選擇。

17、剛開始學Python的時候,就聽說過一句“Python是主流動態語言中最慢的”,後來才知道,說那句話的人根本沒把ruby放在眼裡。如果把ruby也算進主流動態語言裡,那麼就會出現一個比Python還慢了一個多數量級的語言了。

18、ruby流行麼?是不是要走向PHP? php是個好東西,但是問題在於他只能作WEB編程,限制了PHP的應用範圍,稍微需要係統一點的東西就要藉助於C。而現在的ruby似乎也就是走著這條路。直到有一天,有人爆料”ruby是可以做客戶端編程的”,贏得大家一片好奇。況且現在的ROR能否取代什麼還是個未知數。從Java

WEB開發中解救出來的人們也不都是走向了ruby。

四、評《選Ruby還是選Python? 》

Python和Ruby的設計哲學確實有很大的差異,這個問題,我就不評論哪個更好了,各有所愛吧。至於效率,Ruby永遠不要考慮跟Python相比。 Ruby是偽線程,而且根本沒有利用多核心CPU的可能,直接通過。而Python使用native

thread,僅僅由於部分模組不是threadsafe的而加入了GIL來限制應用多核心CPU,而在我最近的測試中,在使用Twisted的非同步線程之後,已經可以很好的利用多核心CPU的計算能力了。執行效率上也不是一個數量級,自己試試看就知道。

拿Java對比Python,可見作者創造力之強悍,哈哈。開源專案是很符合達爾文的自然選擇的,難道Ruby的開源專案少倒成了優點了?另外,在Python中我也沒見除了WEB

framework之外有什麼項目有太多的重複。舉個例子,pypcap就已經基本淘汰了pcapy了。

談到資源,Ruby還有很長的路要走,所以提到雙方都很強的時候,麻煩不要太並列化了。至於Java社群的人傾向於學習Ruby,我個人認為只是被Java折磨慣了的開發者目光太狹隘所致。語言是工具,物件導向也是工具,純粹的物件導向並不見得高明到哪裡去,Python也有函數式程式設計的支持,作者怎麼沒有提到。另外,Python的許多做法是以開發效率為第一目標的而不拘泥於各類形式,​​甚至為許多智力有限的人所廣泛詬病的C++中的多繼承,Python也可以支持。問題不在於支持了什麼讓你不喜歡的東西,而是讓盡可能多的人使用他們喜歡的東西。另外,一直被Ruby開發者所認為的Python不夠OO的一個例子就是取一個序列的長度,Python使用len(x)的方法。這個問題,如果Ruby開發者認為x.length就可以算是OO的話,那麼Python也大可以直接使用x.__len__()來取得長度。從用方法來封裝屬性的Java角度講,誰比較OO呢,哈哈。

Ruby是一個日本人的作品,呵呵,這個就不多說了,不喜歡日本的國人有很多,在此我僅在技術層面就可以把Ruby貶低下去,無須用非技術的東西了。

關於Ruby on

rails,Ruby社群確實把幾乎所有的精力都集中於此。但這只能表現出Ruby的幼稚,事實已經證明了,ROR的許多模仿者已經推出無數的高級功能,遠遠超過了ROR,沒有取代ROR只是出於先入為主的觀念。如果現在的Ruby,突然失去了ROR又會是什麼樣子。至於作者提到的zend,居然用來跟ROR相比,有如以卵擊石,我學過Python的2種WEB框架,平時也比較關注Python和Ruby的各種東西,但是zend這個東西,我是沒有聽說過的,不知是不是作者的作品,哈哈。如果一定要在WEB框架上有個較量的話,你可以用django,Quixote,mod_python之類的來比較一下。 django,典型的ROR模仿品,還在成長,但是已經有很多優於ROR的功能了,而性能上遠優於ROR自不必說。應用Quixote的douban.com是所有使用Python和Ruby網站中流量最大的,而且在相同硬體配置的情況下比ROR實現速度快了一倍還多,要知道去除WEB伺服器等等的各種平等損耗之後,這可是要快上一個數量級的東西。至於mod_python,據說www.gnu.org用的就是這個。如果Ruby還想開源的話,那就永遠活在Python的陰影裡面吧。

至於上手的速度,各個人有不同的狀況,不作評論。至於靈活性所帶來的東西,仁者見仁,就不要評論了。作者談到Python的入門不容易,真不知Ruby有個何等容易。我初學Python時,第11天就用Python寫了一個詞法解析器,至今仍在我部落格上可查。所以,入門難度這個東西,每個人還是自己去試試為好,不必聽別人怎麼說。

提到ROR生成的目錄有很多東西,要很久才可以都了解,這確實是IDE的綜合症。在Python下,比較典型的例子是TurboGears,如果你希望了解整個應用程式的運作方式,你可以從核心cherrypy開始學習,然後開始使用TurboGears就沒有什麼可不了解的東西了。在這個角度上,ROR沒有選擇。再者,現在ROR可用的一種連接WEB伺服器的方式scgi,當年也是Python的作品,又是一個在Python的陰影下活著的小東西。

未來的發展麼,孤注一擲的Ruby還很難說,但既然是孤注一擲,風險還蠻大的。而Python麼,我也以為真的會平穩的發展,但是後來Micro$oft的加入,讓我們都難以預料Python的未來到底有多大了。我們再回頭談談作者一直討厭的Python的多樣性,在我看來Ruby可以超越Python的東西屈指可數,而Python超過Ruby的東西,自然是Ruby難以逾越的鴻溝。所以從程式語言的多樣性考慮,也就不建議大家學Ruby了吧,少了一種選擇,聚集一些人氣總是好的。

五、python和ruby,我選誰?

其實python和ruby非常接近,比大多數別的語言要接近的多,所以喜歡用啥就用啥(大實話,雖然也是廢話)。文法上的差別雖然有那麼一點,大部分是syntax sugar,我鬥膽稍微列幾個(python我也忘得差不多了,不對的大家儘管來鞭屍吧),但是主要差異還是設計思想上的:靈活vs明確. 我不認為兩者在生產力上會有什麼差別,如果你熟悉的話。 *注意,僅限語言本身的比較。

1. ruby​​的case可以匹配很多東西:範圍/數組,對象,正則表達,python沒有case/switch而使用if/else比較死板點

2. python的縮進很漂亮,雖然有時會造成些許麻煩。 ruby的end蠻難看的,所以大家都被逼當one liner(玩笑)

3. 感覺上ruby比python更OO,當然這也可能是因為python不提倡用那些改變對象內部構造的'伎倆'造成的錯覺

4. python有list comprehension, ruby​​沒有:(

5. python有真正的keyword argument, ruby​​用hash模擬,當然實際用起來沒什麼差別

6. python的self很討厭,ruby沒有那種繁瑣的東西

7. reflection,ruby內置了很多方法,比如object.methods,而python把這些信息存在特殊的字典裡。 ago這樣的花樣,python好像沒辦法直接修改內建類別也反對這麼做。單子方法,也就對物件單獨定制,python不知道有沒有類似概念

12. ruby​​有method_missing機制,python可以使用__getattr__截獲未定義方法(from qiezi)

# 13. ruby​​使用單繼承+mixin,python使用多重繼承,不過python也有mixin

14. ruby​​有attr_*系列語法helper,省卻自己寫一堆setter/getter, python的property方法還是得自己寫setter/getter

15. ruby​​和python都使用duck typing,不過python也有一套顯式的interface機制(從zope3併入內核了麼?)

16. ruby​​的函數呼叫括號是可省的,稍微少敲幾下鍵盤。 ,只好等大牛來說說了。的$x常數

19. ruby​​內建正則表達,方便一點

#20. ruby​​的yield是用來call block的。而python的yield是用來給generator輸入輸出值的。

21. python的庫給我感覺命名規範有點不統一,有些方法用snake_case有些則用CamelCase,也許是庫太多了遺留下來的歷史問題

22. python的三引號很漂亮,ruby的<<-XX…XX太難看了,也可以用%q{…}包裹多行文字(from qiezi)

#23. ruby​​的類庫設計中喜歡為方法加上別名,方便記憶。

另: ruby​​官方網站也提供了一些基本的比較。

六、兩種語言的資源和學習曲線比較:

總體的印象,用一個不大恰當的比喻:如果Python是Java,那麼Ruby就是.net。我們知道,Java世界非常複雜,非常多樣性,任何一個需求,都會有很多開源項目,他們用不同的思想來實現,性能特點迥異,到底選那個,總是令人犯錯。現在Python也是如此,而由於Python開發難度遠低於Java,導致Python的相關專案比Java還要多得多。

資源上,兩者社群都很強,有趣的是,現在Java社群存在著被Ruby同化的危險,至少我訂閱的幾個Javablog聚合中談Ruby比Java還多。 Ruby的社群較為集中,Python則較為分散。我總懷疑Ruby的日本用戶較多,但因為不懂日文,很難確認這個想法。對於一個母語非英語的創辦人,我總是有點恐懼,怕很難理解他,怕很難得到最新消息等等,雖然這個擔心目前看來並無必要,不過,誰知道會怎麼樣呢!

Ruby之所以現在突然變得熱門,和rails這套架構是分不開的。考慮到Ruby,就要考慮到Ruby on rails。 rails提供了一套非常好的web開發框架,開發效率非常高。 Python雖然有許多類似的架構實現,但並沒有出現一個能夠一統江湖的架構。 Python的zend雖然完整,但比較偏向web伺服器,不能用來和rails比較。

Ruby比pyton更容易上手。從語言特徵來看,Ruby有很多有趣的創造,比如說block,但大規模的應用這些好玩的東西讓程式變得混亂。 Python語法強調簡單,但由於太靈活,簡單得太過分,於是傳統程式設計師經常會看到一些令人大吃一驚的表達方式。我不知道這應該算優點還是缺點,至少我認為文法過於靈活,容易導致不同程式設計師的程式碼風格差異過大,增加了學習成本。

初期入門,Ruby更容易,但一旦達到一定複雜度,那麼Ruby的難度驟然加大。 Python入門不容易,複雜的時候也不會太痛苦。 rails有入門簡單,深入困難的問題。 rails產生的目錄是做什麼用途? o/r mapping如何實現的?如何把資料從web傳遞到資料庫的。這些都是Ruby程式設計師早晚要面對的問題。 Python則不會這樣,搞不清楚這些,大概根本沒辦法開始。整合度太高的快速開發工具都有這個特點,無論是VB、Delphi,還是.net,有多少使用了半年以內的開發人員可以說清楚工程目錄下面所有的文件的用途、每個文件中的語法?我相信很多很有經驗的使用者也未必說的清楚。

從架構來看,二者雖然其實相差甚遠,但最後表現出來的結果反而很相似。 Ruby是純粹的OO語言,而Python是函數和OO混合型。雖然Ruby也能用函數風格的編碼方式,但實際上是模擬出來的。他們的這個差距對於普通的程式設計師影響並不大,畢竟看起來差不多。

整體來說,如果是非專業人員初嘗開發,Ruby是合適的。對於專業的程式設計師,我還是建議選擇Python。

對於未來發展,我認為Python的發展可預見,會較為平穩。 Python已經屬於一個社區,而非一個人,但Ruby由於種種原因,Ruby的作者maze的意志仍然會對Ruby的發展造成較大影響。 Sun控制Java,但由於sun的資源強大,且組織了jcp進行統籌,所以Java發展很不錯,但Ruby能不能作到這一點,還需要時間來證明。

七、從Python到Ruby

Python是一門非常優秀的語言,從Python遷移到Ruby,你將會發現一些文法上的差異。

相似點

和Python一樣,在Ruby中,…有一個交互提示(叫做irb).你可以在命令列中讀取文檔(通過ri 命令來替代pydoc).沒有特別的結束一行的符號(新行除外).文字可以用多行,就像Python中的三個引號.List用[],Dict用{} (Dict在Ruby中叫“hashes”).Arrays的工作方式相同(2個Array相加成為一個更長的Array,但是想這樣a3 = [ a1, a2 ] 合併,將產生一個包含數組的數組).Objects是有固定類型和動態轉換的.一切都是object,變數名稱只是一個指向Object的指標.雖然關鍵字不同, 但是exceptions的工作方式不變.你擁有嵌入文件的工具(在Ruby中叫做rdoc).

不同點

與Python不同, 在Ruby中,…Strings是可以改變的。你可以使用常數(常數的值是不同改變的)。這裡有些強制規定的書寫要求 (例如:class的名字以大寫字母開頭, 變數名稱已小寫字母開頭)。這裡只有一種容器(Array), 並且是可以改變的。引號中的String限制不同。這裡沒有新風格的Class,Class只有一種風格。你無法直接存取屬性,在Ruby中,都是透過方法呼叫實現的。在方法呼叫中使用(),是一種可選的策略。這裡用private等等限制存取的關鍵字,來取代Python中的名字隱藏。 「mixin's」用來取代多重繼承。你可以在任何時候修改已有的Class,並且加入新的方法。用true和false來取代True和False (用nil來取代None)。在判斷真值的時候,只有false和nil會被認為是假.其他所有的都認為是真(包括0, 0.0, “”,和[])。用elsif取代elif.用require取代import. 但是用法是相同的。用usual-style來註解文檔(替代docstrings) 同時用來產生文檔。

八、從三個面向來進行Python與Ruby的比較:

1.各自所適用於什麼應用

2.開發環境、運作環境

3.可移植性如何,因為專案最後計劃移植到手機平台,如windows CE Symbina

#【1.各自所適用於的應用場合】

查閱的結果似乎對於這兩種語言的評價都很好,在網頁開發上的表現都很好。都很適用於快速的應用程式開發,開發的效率很高。

Python:

摘取了一些與專案相關的應用方面的敘述

跨平台開發:

Python 以中立方式支持不同的一系列平台,如果使用者使用的系統包含不同的平台,使用Python 開發應用程式則再好不過;它這種適應性也可以為系統預留使用其它工具的可能。對於頻繁更換平台用戶,Python 是個理想的選擇。

為最終用戶提供軟體服務時,Python 也是個替代方案,可以避免同時以不同應用軟體編程的時間和費用。

網際網路程式設計:

Python 隨附的標準模組可以對網路插槽進行初級和協定層級的通訊,例如,如果要從POP 伺服器上讀取電子郵件,Python 隨附的庫模組可以做到。另外, Python 也支援 XML、HTML和 CGI​​ 函式庫文件,所以利用它可以解析使用者輸入的需求,並透過網頁伺服器產生最佳品質的成果。

程式設計師也可為擁有 Python 內建解譯器的 Apache、Unix 和 Windows 網路伺服器編譯模組。基於 CGI 程式的功效,可以很方便地執行 Python 語句而不用單獨裝載。

針對python的網路編程,有一本很好的書:《python網絡編程基礎》

這本書全面介紹了使用Python語言進行網絡編程的基礎知識,主要內容包括網路基礎、進階網路作業、Web Services、解析HTML和XHTML、XML、E-mail服務、FTP、使用Python操作資料庫、SSL、幾種伺服器端框架(包括Socket伺服器、SimpleXMLRPCServer、CGI和mod_python),以及多工處理(包括Forking、執行緒和非同步通訊)等。本書實用性強,共提供了大約175個實例,6600行以上的程式碼,是幫助讀者全面而快速地學習Python語言、編寫網路程式的最佳實踐。

Ruby:

功能強大,物件導向的腳本語言,可以讓您方便快捷地進行物件導向編程,有時使用像Smalltalk、Eiffel或C++這樣正式的物件導向語言來開發一些小專案顯得有點」小題大做」,而Ruby剛好可以滿足這些物件導向程式設計的需求.當然了,您也可以使用Ruby進行普通的流程導向程式設計。

Ruby支援很多網路協議,不管是高層的還是底層的。 ruby提供了一些基本類,讓你可以使用TCP,UDP,SOCKS等很多協定交互,而不必拘泥在網路層。這些類別也提供了輔助類,讓你可以輕鬆的對伺服器進行讀寫。進行網路程式設計也是很不錯。

【2.開發環境、運作環境】

Python:相較之下,就是沒有一個很強的整合開發環境。有人說開源軟體相對於收費的那種軟體好用一些。

用得較多的幾個:

Python自帶的idle:不是python的IDE中最好的…

PythonWin :使用起來非常得心應手(就像使用Windows 那樣舒服)。它有個好用的編輯器,包括程式碼合併、語法標籤高亮顯示以及程式碼自動完成特性。 PythonWin 和有些 IDE 一樣,不包含任何類型的表單設計器;但它提供一個優秀的偵錯器,具有監視、程式碼檢查、互動式偵錯視窗、斷點、和其他偵錯器該有的功能。最重要的是,PythonWin 很穩定,儘管有時在 Win95r2 系統上使用時會奇怪地「停止回應」。介面上來說,PythonWin 比較簡單,但非常吸引人,很好的運用了可嵌入和可對接的元素(我有點偏愛 Idle 風格的 “many windows everywhere”,它也為其他許多 IDE 所採用的)。 PythonWin 也整合了 ActiveState 的 HtmlHelp 版本的 Python 說明文件和 PythonCOM。

eclipse的pydev插件,eclipse+pydev

Pydev 基於Eclipse的,非常棒的Python環境,改進速度非常快。提供的一些功能

UliPad :

一個編輯器,你可以用它來進行你的文件寫作,程式設計開發。它使用 Python 程式語言開發,使用者介面基於 wxPython 。它除了想要完成一般編輯器的常用功能之外,最主要是想實現一種方便、靈活的框架,開發者可以方便地開發新的功能。而且有程式設計經驗的使用者還可以針對日常工作中的特別問題編制處理的插件,從而使之與自已的日常工作緊密結合起來。由於使用的是 Python 這種功能強大的程式語言,你可以方便地對本軟體進行修改,從而滿足自已的需要。

UliPad 支援程式碼著色、智慧補全、程式碼調試、Python類別瀏覽、程式碼片段、Ftp功能、目錄瀏覽等等強大功能,其Doc 目錄下的文件更是非常豐富,是你寫Python的絕世好幫手!

系統需求:

python 2.4+

wxPython 2.6+

我們最後選擇的是UliPad,還是挺棒的。

Ruby:

Ruby有極佳的高階調試器。

可以用netbeans的ruby插件或eclipse的ruby插件

Eclipse下安裝開發環境的大致流程:

1. 安裝 Ruby 1.8.6 One-Click Installer。

2. 將 Eclipse Platform Runtime Binary 壓縮包解壓縮到某個目錄。

3. 將 Ruby Development Tools 壓縮包的內容解壓縮到 Eclipse 對應目錄下。

運行環境在其官方網站上下載對應的版本再安裝即可,windows下面的安裝較為簡單,雙擊運行即可安裝。

【3.可移植性】

Python:

由於它的開源本質,Python已經被移植在許多平台上(經過改變使它能夠工作在不同平台上)。如果你小心地避免使用依賴系統的特性,那麼你的所有Python程式無需修改就可以在下述任何平台上面運作。這些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、 PlayStation、Sharp Zaurus、Windows CE甚至還有PocketPC!

Python執行時,首先會將.py檔案中的原始程式碼編譯成Python的byte code(字節碼),然後再由Python Virtual Machine來執行這些編譯好的byte code。這個機制的基本想法跟著Java,.NET是一致的。然而,Python Virtual Machine與Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一種更進階的Virtual Machine。這裡的高級並不是通常意義上的高級,不是說Python的Virtual Machine比Java或.NET的功能更強大,而是說和Java 或.NET相比,Python的Virtual Machine距離真實機器的距離更遠。或者可以這麼說,Python的Virtual Machine是抽象層次更高的Virtual Machine。

可以安裝一種物件導向的解釋性的電腦程式設計語言,也是一種功能強大而完善的通用型語言,已經具有十多年的發展歷史,成熟且穩定。 Python 具有腳本語言中最豐富和強大的類庫,足以支持絕大多數日常應用.在Symbina智能手機上支持C++和JAVA開發的兩類程序,裝上Python後,也就可以支持眾多以Python開發的各種程序了。對於普通的手機用戶,我們不用了解太多,只是安上Python這個平台就可以了,可以讓我們的手機支援更多以Python開發的程式。目前在Symbian手機上已經有相當多的Python開發的程序,也都是比較實用的。

Ruby:

它大部分是在Linux上開發的,但是可以在很多類型的Unix, Dos, Windows95/98/Me/NT/2000/XP, MacOS, BeOS, OS/2等系統上運作。

關於ruby跟手機開發的資料很少,有在windows CE上運行的版本,但是好像現在相關的資料還特別少,而且安裝失敗、編譯不通過的例子偏多。日文頁面上有少量的日文介紹。

【總結】

然後針對於Python跟Ruby在朋友的建議下還給出瞭如下一些參考意見,在此感謝他:

#1.  Python也被稱為是一門清晰的語言。因為它的作者在設計它的時候,總的指導思想是,對於一個特定的問題,只要有一個最好的方法來解決就好了。 Python語言是一種清晰的語言的另一個意思是,它的作者有意的設計限制性很強的語法,使得不好的程式設計習慣(例如if語句的下一行不向右縮排)都不能通過編譯。這樣有意的強製程式設計師養成良好的程式設計習慣。 Python在其他部分的設計上也堅持了清晰劃一的風格,這使得Python稱為一門易讀性、易維護性好,並且被大量用戶所歡迎的、用途廣泛的語言。

同一個問題用Python幾個人分別寫寫出來的程式碼會很相近。但Ruby則設計想法不一樣,用它寫出來的程式太過於靈活,不同的人寫出來可能相差很多。

2.  Ruby英文文件極度缺乏,中文文件更不用說。 Python社群相對成熟,也有一大堆的資料。

最後給出Python的幾個網站
•http://www.python.org/– Python 的官方網站
•http://python.cn/– Python 中文社群
•http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPythonPython For Dot Net 的網站

Ruby的幾個網站
•www.ruby-lang.org/ zh_CNRuby中文官方網站
•http://www.rubystudy.com/bbs/tag.php?name=RubyRuby中文學習交流社群
•http://ruby-lang.guo.cc/Ruby線上參考手冊

以上是比較python和ruby的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn