函数定义与Lambda表达式

Hyp*_*eus 1 python

鉴于这两个片段:

def sex (code):
    return {'m': 'masculino', 'f': 'femenino', '': 'ignorado'} [code]
Run Code Online (Sandbox Code Playgroud)

sex = lambda code: {'m': 'masculino', 'f': 'femenino', '': 'ignorado'} [code]
Run Code Online (Sandbox Code Playgroud)

实际差异是什么?他们有不同的行为吗?

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

我问这个,因为我在这个论坛中的一个答案(python3 - 学习搜索,这个非常简单的例子不能正常工作),它提供了两种可能性,被另一个用户("修订版")截断,删除了lambda术语.修改的原因是最后一个选项(lambda表达式)比函数定义更糟糕.这让我想知道:

为什么lambda表达式比函数定义更糟?这些特别简单.

Bre*_*arn 7

lambda和a之间没有功能差异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
Run Code Online (Sandbox Code Playgroud)

我会说,在一般意义上说任何一种写函数的方式都"更糟"是错误的.但是,在您的示例中,def版本更好.原因在于,一般来说,lambdas的目的是简洁地在表达式中编写简短的匿名函数.没有真正的意义name = lambda: ....如果您要立即给它命名,没有理由定义匿名函数.

lambdas的关键在于你可以做到someFuncRequiringCallback(lambda x: x+1),你不想给这个函数命名,或者除了这种情况之外还要用它来做任何事情.如果您确实想在多个上下文中使用函数,只需使用常规函数定义它即可def.