使用哪个更合适:lambda函数或嵌套函数('def')?


问题内容

我主要使用lambda函数,但有时使用似乎提供相同行为的嵌套函数。

这是一些琐碎的示例,如果在另一个函数中找到它们,它们在功能上会做同样的事情:

Lambda函数

>>> a = lambda x : 1 + x
>>> a(5)
6

嵌套功能

>>> def b(x): return 1 + x

>>> b(5)
6

使用一个相对于另一个有优势吗?(性能?可读性?局限性?一致性?等)

有关系吗 如果不是这样,那确实违反了Python原则:

应该有一种(最好只有一种)明显的方式来做到这一点


问题答案:

如果您需要将分配lambda给一个名称,请改用a defdefs只是分配的语法糖,因此结果是相同的,并且它们更具灵活性和可读性。

lambdas只能 使用一次,丢弃 没有名称的函数。

但是,这种用例非常少见。您很少需要传递未命名的函数对象。

内建函数map()filter()需要函数对象,但是 列表理解生成器表达式
通常比那些函数更具可读性,并且可以覆盖所有用例,而无需使用lambda。

对于情况下,你真的需要一个小的函数对象,你应该使用operator模块的功能,如operator.add代替lambda x, y: x + y

如果您仍然需要一些lambda未涵盖的内容,则可以考虑编写def,以提高可读性。如果函数比operator模块中的函数更复杂,则adef可能更好。

因此,现实世界中的好用lambda例很少见。