鉴于这两个片段:
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/