【问题标题】:Python lambda vs Ruby lambda [closed]Python lambda vs Ruby lambda [关闭]
【发布时间】:2015-10-27 01:57:34
【问题描述】:

在 Ruby 中,lambda 可以用作匿名函数,它也是一个对象。

但是 Python 呢?我知道 Python lambda 也可以用作匿名函数,但我想知道它们之间的其他区别是什么?

【问题讨论】:

  • @metatoaster 我认为这是答案的一部分。我想知道所有的区别,而不仅仅是限制。
  • 不管怎样,这个问题也太笼统了,stackoverflow也不是讨论受观点影响的答案的论坛。

标签: python ruby lambda


【解决方案1】:

Python lambda 与函数

Python lambda 是功能齐全的函数对象,它们只是缺少名称和文档(文档字符串),并且只能返回表达式(没有语句)。所以命名函数和 lambda 都有闭包,可以像对象一样传递。

许多 Python 程序员宁愿不使用 Python lambda,因为它们有缺点,而且除了能够在函数调用中直接将它们作为参数提供而不是在不同的行上创建命名函数之外,没有其他优点。

对于 Python,除了创建 lamba 的约束之外,由 lambda 创建的函数和由 def 语句创建的函数之间没有区别。两者都是同一类型的对象:

>>> def foo(): return None
>>> bar = lambda: None
>>> import dis
>>> dis.dis(foo)
  1           0 LOAD_CONST               0 (None)
              3 RETURN_VALUE        
>>> dis.dis(bar)
  1           0 LOAD_CONST               0 (None)
              3 RETURN_VALUE     

用于函数式编程的 Ruby lambda

据我了解,Ruby lambda 是通过传递函数进行函数式编程的最佳实践方式,因为它们提供闭包 - 并且它们 should be called 使用 .call 方法。 Ruby lambda 可以包含复杂/多行表达式。

结论

比较一下,两者功能齐全,提供词法作用域(闭包),匿名且缺乏文档。

相比之下,Python lambdas 返回单个表达式,而 Ruby lambdas 可以包含多行。预计 Python lambda 将直接使用括号内传递的可能参数 () 调用,而 Ruby lambda 最佳实践是使用 .call 方法。

根据每个领域的权衡和公认的最佳实践,人们会期望那些使用 Ruby 编程的人更喜欢 lambda,尤其是函数式编程,而使用 Python 的人更喜欢命名函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2016-09-13
    相关资源
    最近更新 更多