python和ruby之间,选择谁?
2007-03-23 14:42
543 查看
其实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把这些信息存在特殊的字典里。差不多
8. ruby的block功能很强,python的lambda只能返回单一值
9. 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官方网站也提供了一些基本的比较。(from Robbin)
-----------------------------------------------引用评论-----------------------------------
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的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官方网站也提供了一些基本的比较。(from Robbin)
-----------------------------------------------引用评论-----------------------------------
2007-01-30 11:32:10: 小豆包-Ubuntu菜鸟 (广州)在那个时候,如果想在国内搞Web开发,Python好像是唯一一个可以做到轻量级、增量开发、通用技术支持的语言,当时Ruby在国内还没几个人关注。而且据说阿北是从UNIX上转过来的技术专家,Python在UNIX上的地位比Ruby重要的多,可能环境的影响也很重要。相比之下,Ruby的技术力量主要来自Java圈子。 |
2007-01-30 13:15:20: 沈崴 (广州)Python 2.5 (r25:51908, Jan 28 2007, 14:20:16)[GCC 4.0.4 20060507 (prerelease) (Debian 4.0.3-3)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 'Ruby' > 'Python' True >>> 'Ruby' > 'Java' True >>> 'Ruby' > 'C/C++' True Python 说了, Ruby 是最拽滴。 |
2007-01-30 13:17:17: 小豆包-Ubuntu菜鸟 (广州)哈哈,我看见end if啦,end for啦这些东西就怕,所以……Ruby基本与我无缘了 |
2007-01-30 14:01:32: limodou一旦学了python,别的我基本上不想了。其实ruby与python相比还有许多差异,比如执行效率,第三方库。而且ruby本身比python要复杂。以前有人搞过c,python, ruby, java的语法图,从图中看c,python比较简单。而ruby和java比较复杂。 再看语法清楚上,ruby是从perl学了许多东西,所以还是有许多奇怪的符号,而python基本上是从简单,优美中重新的设计产生,在可读性,优美上要强于ruby。 |
2007-01-31 11:23:38: 仨儿 (北京)http://wiki.woodpecker.org.cn/moin/BPUG/2006-03-26有阿北自个儿说的想法,大家可以回顾一下,就俺的理解: 1. 豆瓣开发时,Ruby 还没有成熟 2. 就算是成熟了,小日本的东西也不推广使用 3. 就算不管日本,Ruby 的支持库和社区活跃程度和Python 的也没有可比性 4. 以上3点再重复.. |
2007-01-31 15:52:41: 丫头变坏了 (北京)那相对于java、PHP呢? |
2007-01-31 15:56:54: 小豆包-Ubuntu菜鸟 (广州)Java太笨拙,PHP太专注于Web。 |
2007-01-31 16:34:33: 一个好孩子 (北京)非常感谢楼上诸位的讲解!思路已经逐渐清晰。我只有在实践中才更能体会到这些,谢谢。 |
2007-02-01 21:54:10: henry.3 (北京)轻量级的开发非常重要。 |
2007-02-02 12:51:46: 爱咖啡 (北京)在python的小组里问这个问题你又能期待什么样与众不同的答案? |
2007-02-02 15:10:41: 一个好孩子 (北京)同样,如果去了Ruby,你或许听到的是向Ruby方倒的声音。来这里问Python,要的就是最专业的回复,他们的理论/看法来自实践。 |
2007-02-20 17:34:43: openweb (深圳)At Google, python is one of the 3 "official languages" alongside with C++ and Java.我想对于 Python, 你可以更加坚定啦 :) |
2007-02-20 19:42:34: 冰の銳其实Ruby真的是没创意的东西——包括Perl的字符串处理机制、Smalltalk的面向对象机制、ML-like的语法、Lisp中关于DSL的想法,还有shell里面的一些东西。然而,在Ruby中你所得到的这些思想的整合后的力量大约只是上述语言各自的“一半”。Python也有一些“看上去”不怎么样的东西,但是他新颖,有一个工作的中心(使用主义),有创意,尤其是看上去很像C的面向对象机制设计,还有貌似JavaScript的'.'操作符;面熟,但有自己的想法,这是我所推崇的。 |
相关文章推荐
- 我在Python和Ruby之间的选择
- 豆瓣在python和ruby之间为何选择前者?
- R与Python之间该如何选择
- Python和Ruby的真实选择
- [CPyUG] [OT] php python Ruby选择 - maolingzhi@gmail.com - Gmail
- 豆瓣网站为什么会选择python而不是ruby
- Python,Php,Ruby 三者中为什么会选择Python
- 计算1-10^12之间所有数的约数的和的python实现
- 每个程序员都应该学习使用Python或Ruby(选Python)
- 再谈PHP、Python与Ruby
- 如何在 SVG 和 Canvas 之间进行选择
- Python选择排序算法
- 强弱类型,动态静态语言比较(JAVA,C,C++,Python,Ruby,PHP,Perl)
- 用python实现选择截图区域
- eclipse python插件地址选择以及安装
- 学java、python、web前端编程语言,自学和培训如何选择
- C++/C#/F#/Java/JS/Lua/Python/Ruby渲染比试
- python str与bytes之间的转换
- (原)python中不同文件之间使用所谓的全局变量
- python写的计算两个日期之间的天数的脚本