搜索
首页后端开发Python教程Ruby 和 Python 相比有什么优势和缺陷?

回复内容:

引用一下孟岩的区分标准

Ruby是一种魔幻语言,而Python是一种简约语言

好吧看我的说明,我也是偏魔幻的爱好者 Ruby 和 Python 太相似了,取舍大部分都是个人喜好上的原因。比如我就觉得 Python 的 “There is only one way to do it.” 比 Ruby 的 “There are many ways to do it.” 要好,这不光是考虑团队协作的问题,更重要的是自己能很快明白自己三个月前写的没有任何注释的代码是在干什么。当然也有很多人觉得自由和灵活要比可读性来的重要,所以我说这个是个人喜好的原因。

客观上的 Ruby 比 Python 的优势我想到的有这么几个:

Block 应该是语言层面上 Ruby 比 Python 更酷的地方,Python 的匿名函数(lambda function)制约太多,属于鸡肋(BFDL GvR 不认可函数式编程的许多方面)。

OS X 上的话,Ruby 比 Python 最重要的优势可能是 MacRuby 的存在。我大胆猜测以后 MacRuby 将成为 Objective-C 之外(如果不是完全替代的话)的苹果官方语言。MacRuby 除了能更加方便快捷的创建 Cocoa 应用外,ruby block 使得利用 OS X 的 Grand Central Dispatch 变得容易,在以后的多核、混合核(CPU+GPU)应用上非常重要。

劣势:

Ruby 的硬伤之一在于性能。官方实现 Ruby 1.9 比 CPython 逊色不少。另外 Python 拥有诸如 Numpy, Psyco, PyPy, Cython 等多种性能倍增的途径,相比之下 Ruby 想要提高性能的途径则非常有限。

Ruby 的硬伤之二在于第三方包。Ruby 传入英语世界并大规模流行起来的时间不长,大部分的第三方包都和 Web 相关,Web 领域外的包数量远远不及 Python。特别是在科研等方面的区别非常明显,很多学科领域都有基于 Python 的成熟应用,而几乎找不到 Ruby 的相关包。这除了历史渊源,也和 Python 更加简洁的语法(很多用 Python 做研究的人不是计算机专业的)以及前述的性能倍增器(主要是 Numpy 和 Scipy)有密切的关系。 Ruby的写法更加灵活,写起来更加舒服,但是这也导致不同人的代码风格差异很大,协作起来需要更多的精力。 刚在G+上写了篇帖子,贴一下。有些观点和前面的观点有所重复,请见谅。

正文如下:

本周的Pycoder's Weekly不错,第一个Topic是:

“What are the advantages of Python over Ruby?”

Python和Ruby阵营之间似乎一直在争论谁更好(貌似Ruby阵营的人们更狂热些),不信可以试试google一下“Python Ruby”。上面这篇文章我目前还没看,在看之前先说说我的个人看法:

Python优于Ruby的地方:

a) Python开发人员的背景丰富多彩,阵营规模很大,这直接导致了Python的各种lib比Ruby多很多很多很多

b) 和Ruby相反,Python的哲学是“做一件事情有且只有一种方法”(There should be one-- and preferably only one --obvious way to do it.)。Ruby的信徒会觉得这样非常boring,但是我觉得这一点减轻了人们在开发时的认知负担和选择成本,对于提高开发效率是很有帮助的。同时,这个特点使得不同的人用Python写出来的代码不至于相差很大,这对于团队合作也是很有用的。(这点也导致了Python中是有公认的Best Practice的,但是Ruby中就很难找到一个公认的Best Practice)

c) Python在面向对象上做的并不好,其实是把面向过程和面向对象杂糅起来了。(随着Python 3的发展相信这点会有所改观)我个人虽然感觉这样不太好,但是实际用的时候就会发现,不强调面向对象其实能够减轻程序员的认知负担,写起代码来会比较随心所欲,对于c程序员来说也更容易接受。(好吧,如果你觉得这点是Python的缺点,那么其实你也是对的~)

d) Python开始慢慢走进大学一年纪的教科书,可以预见,未来的Python开发者阵营会继续不断壮大。(当然Ruby的阵营也会越来越大)

e) Python解释器,特别是CPython,目前比现有的Ruby解释器快很多。这点Ruby的发明人Matz也是很想再重新写个Ruby的虚拟机,但是苦于要做的事情很多,不知道什么时候能完成。Ruby的运行效率目前来看实在太慢了些。(当然程序运行效率和代码是如何写的也有很大关系,想让Ruby程序尽可能快的话,除了一般的程序优化方法外,还要注意要多用built-in的东西,因为它们是用c写的,运行快)

f) Python的语法比较简单,容易上手。


说了这么多Python优于Ruby的地方,现在再来说说我觉得Ruby优于Python的地方:

a) 第一个印入我的脑海的优点是:有趣!当你开始慢慢学会使用Ruby后,你就会觉得Python的代码比较死板。这是因为Ruby从Perl中继承的一条哲学是和Python完全相反的:“每一件事情总是有多种做法”(Having more than one way to do the same thing)。所以程序员的创造力就完全被激发出来了。当你看到某个问题的一种前所未见又十分优雅的解决方案时,你会有一种混杂着强烈喜悦的惊讶的——写(优美的)Ruby能够激发人的灵感。

b) Matz在设计Ruby的时候就想方设法让Ruby成为一个“人性化”的语言,力求使Ruby程序员感觉到使用Ruby是一件愉悦的事情。你能从Mixin、程序块、元编程、极具包容性的语法等等当中获得一种喜悦。

c) 纯粹的面向对象,极其强大的元编程功能。Ruby是纯粹的面向对象。CSDN的范凯曾经说过:“你学习了Ruby以后,你就会发现,原来Java/C++所谓的面向对象就是TMD的山寨版本的面向对象,原来面向对象还可以这样玩啊”。Ruby的元编程能力还有宽松的语法使得使用Ruby可以很轻松的开发DSL(Domain Specific Language),这一点Python是搞不定的。

d) Ruby on Rails!要不是DHH开发出了RoR不知道现在还会有多少人在用Ruby。毋庸置疑,RoR是快速Web开发的神器。为什么RoR那么牛?有一个很重要的原因就是RoR将Ruby的元编程能力发挥到了极致,“甚至到了一种变态的程度”(Matz语,见《松本行弘的程序世界》P.S.想要了解Ruby设计思想的话此书一定要读一读,起码是部分章节)

e) Ruby吸收了很多语言(Lisp、Smalltalk等等)的特性,对于程序员来说了解一下Ruby对于开阔思路是很有帮助的,它能帮助你更好的看清你之前一直使用的语言的限制之处在哪。

暂时就想到这么多,应该还有很多补充的空间。我使用Python和Ruby的时间也很短,所以还是多多参考些Python和Ruby双料大牛们的意见吧~

Ruby:Metaprogramming Ruby

Python:写python metaprogramming的只在部分书章节里有阐述

这是Ruby和python的最大区别。如果你的应用要写api(code)generator,要设计某种形式的DSL,需要语言的OO模型像一块橡皮泥,这是用Ruby的好时候。

其他方面,python的语法设计长期对团队更有利,简洁统一。

我前后想了好几遍,还是觉得这两个语言除了语法糖味道不一样就没什么区别了 生产力是检验语言优秀能力的唯一标准。 python用的人多,用户层面小白多,写手更良莠不齐一点。
ruby,基本用的人都是语法糖爱好者,各种炫技都能看到,真oo无双嗯。

虽然我python用的多一点,但是当我想去看看脚本语言的好书的时候,我发现大部分时间要去看ruby的书才能有不错的提高。比如metaprogramming ruby。 虽然是很旧的问题,但高票回答实在不爽
直接上代码吧

# 语法混乱,很魔幻的rubyrequire 'sinatra'get '/' do
  'Hello world!'end

Python我在2002年开始学习的。当时它是脚本语言之王,所以同一个时代用ruby不爽,用python爆强。 用了13年后, python已经用到熟了。就象是英语一样,很“中国”式的熟练。 不过这么多年经历中,经常被ruby震动。 无论是WEB, 测试, 运维配置, 工具。 总能看到ruby忽然出来优美的东东出来,远超过python几条街。 无语,只能低声下气的,用着烂烂的python包,不满意,自己动手改一下,凑和着用。

最近在用puppet,晕死,又是ruby写的。ansible果然 还是python的风格,快速来一脚,也不管好不好,歇了。 憋屈。 所以只能支持用puppet。

叹气,ruby还是要学啊,perl, java, php一个少不了。 命苦。

不过,大数据方面,人工智能,图像处理,GUI等方面,python的积累还是很厚的。很少见ruby的身影。 hbase shell那个东东是ruby的。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Python中的合并列表:选择正确的方法Python中的合并列表:选择正确的方法May 14, 2025 am 12:11 AM

Tomergelistsinpython,YouCanusethe操作员,estextMethod,ListComprehension,Oritertools

如何在Python 3中加入两个列表?如何在Python 3中加入两个列表?May 14, 2025 am 12:09 AM

在Python3中,可以通过多种方法连接两个列表:1)使用 运算符,适用于小列表,但对大列表效率低;2)使用extend方法,适用于大列表,内存效率高,但会修改原列表;3)使用*运算符,适用于合并多个列表,不修改原列表;4)使用itertools.chain,适用于大数据集,内存效率高。

Python串联列表字符串Python串联列表字符串May 14, 2025 am 12:08 AM

使用join()方法是Python中从列表连接字符串最有效的方法。1)使用join()方法高效且易读。2)循环使用 运算符对大列表效率低。3)列表推导式与join()结合适用于需要转换的场景。4)reduce()方法适用于其他类型归约,但对字符串连接效率低。完整句子结束。

Python执行,那是什么?Python执行,那是什么?May 14, 2025 am 12:06 AM

pythonexecutionistheprocessoftransformingpypythoncodeintoExecutablestructions.1)InternterPreterReadSthecode,ConvertingTingitIntObyTecode,whepythonvirtualmachine(pvm)theglobalinterpreterpreterpreterpreterlock(gil)the thepythonvirtualmachine(pvm)

Python:关键功能是什么Python:关键功能是什么May 14, 2025 am 12:02 AM

Python的关键特性包括:1.语法简洁易懂,适合初学者;2.动态类型系统,提高开发速度;3.丰富的标准库,支持多种任务;4.强大的社区和生态系统,提供广泛支持;5.解释性,适合脚本和快速原型开发;6.多范式支持,适用于各种编程风格。

Python:编译器还是解释器?Python:编译器还是解释器?May 13, 2025 am 12:10 AM

Python是解释型语言,但也包含编译过程。1)Python代码先编译成字节码。2)字节码由Python虚拟机解释执行。3)这种混合机制使Python既灵活又高效,但执行速度不如完全编译型语言。

python用于循环与循环时:何时使用哪个?python用于循环与循环时:何时使用哪个?May 13, 2025 am 12:07 AM

useeAforloopWheniteratingOveraseQuenceOrforAspecificnumberoftimes; useAwhiLeLoopWhenconTinuingUntilAcIntiment.ForloopSareIdeAlforkNownsences,而WhileLeleLeleLeleLoopSituationSituationSituationsItuationSuationSituationswithUndEtermentersitations。

Python循环:最常见的错误Python循环:最常见的错误May 13, 2025 am 12:07 AM

pythonloopscanleadtoerrorslikeinfiniteloops,modifyingListsDuringteritation,逐个偏置,零indexingissues,andnestedloopineflinefficiencies

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中