自:
http://developer.51cto.com/art/200912/169306.htm
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把這些信息存在特殊的字典裏。差很少
8. Ruby的block功能很強,python的lambda只能返回單一值
9. Ruby與Python語法比較下,Ruby的open class已經聲明遠播,能夠玩出2.days.ago這樣的花樣,python好像無法直接修改內置類也反對這麼作。
10. python須要用@classmethod修飾聲明類方法,Ruby是內建
11. Ruby有單子方法,也就對對象單獨定製,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的函數調用括號是可省的,稍微少敲幾下鍵盤。python默認沒括號也不帶參數的話返回函數自己的一個引用。
17. 我不清楚python的meta programming能到什麼程度,以爲pythoner不經常使用那個,也許以爲會把程序邏輯搞得晦澀不明。
18. Ruby從perl繼承了一部分難看的東西,好比不少預約義的$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官方網站也提供了一些基本的Ruby與Python語法比較。