python - 函数定义与 Lambda 表达式

标签 python

鉴于这两个片段:

def sex (code):
    return {'m': 'masculino', 'f': 'femenino', '': 'ignorado'} [code]

sex = lambda code: {'m': 'masculino', 'f': 'femenino', '': 'ignorado'} [code]

实际区别是什么?他们有不同的行为吗?

最重要的是:一个比另一个更受欢迎吗?

我问这个问题,因为我在这个论坛 ( python3 - learning about searching, this very simple example does not work right ) 中的一个答案提供了两种可能性,但被另一个用户截断了(“修改过”),删除了 lambda 项。修改的原因是最后一个选项(lambda 表达式)比函数定义更差。这让我想知道:

为什么 lambda 表达式比函数定义更糟糕?尤其是像这样的简单表达式。

最佳答案

返回相同内容的 lambda 和 def 之间没有功能差异。它们完全相同并且具有相同的字节码。

>>> def sex (code):
...     return {'m': 'masculino', 'f': 'femenino', '': 'ignorado'} [code]
>>> sex2 = lambda code: {'m': 'masculino', 'f': 'femenino', '': 'ignorado'} [code]
>>> sex.__code__.co_code == sex2.__code__.co_code
True

我要说的是,从一般意义上讲,任何一种编写函数的方式都“更差”是错误的。但是,在您的示例中,def 版本更好。原因是一般来说,lambda 的目的是在表达式中简洁地编写简短的匿名函数。执行 name = lambda: ... 没有实际意义。如果您打算立即为其命名,则没有理由定义匿名函数。

lambda 的要点是您可以执行 someFuncRequiringCallback(lambda x: x+1),您不想给函数命名或将它用于除这种情况之外的任何事情。如果您确实想在多个上下文中使用一个函数,只需使用常规 def 定义它即可。

关于python - 函数定义与 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13853386/

相关文章:

python - 使用 nosetests 随机化测试执行顺序

python - 创建正确的轴标签并理解它们

python - 按照代码中的顺序获取类的方法

python - django 在聚合期间对字段执行逻辑(而不是直接进行聚合(Sum ('somefield' )))

python - 如何从 Windows 命令行运行 python 文件 (.py) 而不必先键入 python?

c++ - 使用自定义 python 在 mac os x lion 上提升 python

python - 如何运行x线程数量并等待线程完成

c++ - 返回引用的导出函数

python - 在 Keras 中定义自定义 LSTM 单元?

python - 如何将 Pandas 数据框的值除以每组的第一行?