Python 是另一个很好的通用编程语言。从 Python 到 Ruby,你会发现 Ruby 需要学习更多一点的语法。
相似点
Ruby 与 Python 一样的地方……
- 有交互式命令解释器(叫做 
irb)。 - 可以在命令行阅读文档(使用 
ri命令代替 Python 的pydoc)。 - 没有特殊的行终结符(除了通常的换行符)。
 - 与 Python 的三个引号类似,字符串字面量可以跨越多行。
 - 方括号用于列表,大括号用于字典(Ruby 中叫做 哈希)。
 - 数组操作相同(数组相加,会得到一个长数组;a3 = [a1, a2] 会得到一个二维数组)。
 - 对象是强、动态类型。
 - 一切皆是对象,变量只是对象的引用。
 - 尽管关键字有些许不同,但异常处理方式是一致的。
 - 拥有嵌入式文档工具(Ruby 的工具叫 rdoc)。
 - 同样好地支持函数式编程,比如:一级类型函数,匿名方法和闭包。
 
相异点
Ruby 与 Python 不同的地方……
- 字符串是可变类型。
 - 可以新建常量(无意改变的变量)。
 - 有一些强制习惯用法(例如:类名以大写字母开头,变量以小写字母开头)。
 - 只有一种列表容器,且是可变类型。
 - 双引号字符串可以转义(像 
\t),有特殊的“替代表达式”语法(不用像"字符串" + "相" + "加"这样,允许插入 Ruby 表达式结果到其他字符串)。单引号字符串与 Python 的r"原始字符串"一样。 - 没有什么“新式”或者“旧式”类定义写法。只有一种写法( Python 3 以上的版本没有这个问题,但不能向下兼容 Python 2)。
 - 不能直接访问属性。但在 Ruby 中,一切皆方法调用。
 - 方法调用的括号是可选的。
 - 有 public、private、protected 三种强制的访问控制类型,不像 Python 里面是用变量名加下划线表示。
 - “混入(mixins)”替代多重继承。
 - 你可以增加或修改内置类的方法。俩语言都允许你随时打开、修改类,但 Python 无法修改内置类,Ruby 无此限制。
 true和false代替True和False(nil代替None)。- 判断真值时,只有 
false和nil当做假值。其余一切皆为真(包括0、0.0、""和[])。 elsif代替了elifrequire替代import。其他情况,使用相同。- 通常,代码之上(而不是之下的字符文档)的注释用来生成文档。
 - 虽然有很多语法糖需要记忆、学习,这也使得 Ruby 非常有趣且有效率。
 - 变量设置后无法取消(类似 Python 的 
del声明)。你可以将其重置为nil让 GC 回收旧的内容,但它仍然存在于符号表中。 yield关键字作用是不一样的。在 Python 中,它会记住上一次返回时在函数体中调用的位置。外部代码有责任继续执行函数。而在 Ruby 中,yield会执行作为方法最后一个参数传入的方法,然后立即执行。- Python 支持一种匿名函数,
lambdas。而 Ruby 支持blocks,Procs和lambdas。