您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

从Ruby学习Python;异同

从Ruby学习Python;异同

这是我的一些主要区别:

Ruby有块;Python没有。

Python具有功能;Ruby没有。在Python中,您可以采用任何函数方法并将其传递给另一个函数。在Ruby中,一切都是方法,不能直接传递方法。相反,您必须将它们包装在Proc中才能通过。

Ruby和Python都支持闭包,但是方式不同。在Python中,您可以在另一个函数中定义一个函数。内部函数对外部函数的变量具有读取访问权限,但对写入函数没有访问权限。在Ruby中,您可以使用块定义闭包。闭包对外部作用域的变量具有完全的读写访问权限。

Python具有列表理解能力,非常具有表现力。例如,如果您有一个数字列表,则可以写

[x*x for x in values if x > 15]

要获得所有大于15的平方的新列表。在Ruby中,您必须编写以下代码

    values.select {|v| v > 15}.map {|v| v * v}

Ruby代码并不那么紧凑。由于它首先将values数组转换为包含大于15的值的较短的中间数组,因此效率也不高。然后,它获取中间数组并生成包含中间平方的最终数组。然后将中间数组扔掉。因此,Ruby在计算过程中最终在内存中存储了3个数组。Python仅需要输入列表和结果列表。

Python还提供了类似的地图理解。

Python支持元组;露比没有 在Ruby中,您必须使用数组来模拟元组

Ruby支持switch / case语句;Python没有。

Ruby 支持标准的 expr ? val1 : val2三元运算符。Python没有。

Ruby仅支持单继承。如果您需要模拟多重继承,则可以定义模块并使用混入将模块方法拉入类。Python支持多重继承,而不是模块混合。

Python仅支持单行lambda函数。Ruby块是lambda函数的一种/种类,可以任意大。因此,Ruby代码通常以比Python代码更实用的方式编写。例如,要遍历Ruby中的列表,通常需要

collection.each do |value|

… end

该块的工作原理非常类似于传递给的函数collection.each。如果要在Python中执行相同的操作,则必须定义一个命名的内部函数,然后将其传递给每个方法的集合(如果列表支持方法):

    def some_operation(value):
  ...

collection.each(some_operation)

那不是很好。因此,通常在Python中使用以下非功能方法

    for value in collection:
  ...

在Ruby中,因为块非常易于使用(请参阅#9),所以通常将这种模式编码为一种方法,该方法采用块来对资源执行任意操作。

在Python中,为任意动作传递函数会比较麻烦,因为您必须编写一个命名的内部函数(请参阅#9)。相反,Python使用with语句来安全地处理资源。请参阅如何正确清理Python对象?更多细节。

python 2022/1/1 18:37:47 有228人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶