久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

專欄中心

EEPW首頁 > 專欄 > 扣丁學堂Python培訓之Python和Ruby的優勢和劣勢有哪些

扣丁學堂Python培訓之Python和Ruby的優勢和劣勢有哪些

發布人:扣丁客 時間:2020-12-18 來源:工程師 發布文章

一、異同對比選擇

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的可能,直接pass。而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,據說用的就是這個。如果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培訓之淺談Python和Ruby對比優勢和劣勢的詳細介紹,最后想要了解更多關于Python發展前景趨勢,請關注扣丁學堂Python培訓官網、微信等平臺,扣丁學堂IT職業在線學習教育平臺為您提供最新的Python視頻教程系統,通過千鋒扣丁學堂金牌講師在線錄制的Python視頻教程課程,讓你快速掌握Python從入門到精通開發實戰技能。扣丁學堂python學習交流群:816572891。微信號:codingbb

*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

關鍵詞:

相關推薦

千字分享:《運放秘籍》-運算放大器開環增益曲線仿真你會嗎

模擬技術 2025-09-19

硬件入門路線【精】

存儲器行情來得又急又快 DRAM報價10月看漲雙位數

網絡與存儲 2025-09-19

超越HBM!HBF未來崛起,NAND堆疊成為AI新的存儲驅動力

網絡與存儲 2025-09-19

“爬電距離”與“電氣間隙”是怎樣計算的?

Microsoft將投資40億在威斯康星州建造第二個數據中心

英偉達聯手英特爾 AMD受沖擊最大

英特爾、英偉達歷史性合作! 陳立武、黃仁勛親上火線 強調臺積電重要性

Intersil公司2010年路演武漢站講座1--通信電源解決方案

視頻 2011-10-18

諧振直流環節逆變器的發展

Intersil公司2010年路演武漢站講座4--用于儀器及工業應用的高性能模擬信號鏈產品

視頻 2011-10-18

Intersil公司2010年路演武漢站講座3--高速有源有線 & 顯示端口

諧振直流環節逆變器及其應用

英偉達入股英特爾 臺積電技術在制高點上不受影響

新型AD變換器AD73360 及其應用

Intersil 公司介紹

Intersil公司2010年路演武漢站講座2--ISim設計工具

視頻 2011-10-18

英偉達將向英特爾投資 $5B,作為新芯片合作伙伴關系的一部分

新型鎳鎘電池和電充電器

旋轉變壓器—數字轉換器AD2S83 在伺服系統中的應用

更多 培訓課堂
更多 焦點
更多 視頻

技術專區