为什么使用Lambda函数?

93 投票
16 回答
66643 浏览
提问于 2025-04-16 01:22

我看到很多内容在讲什么是 lambda 函数,语法怎么写等等。但是除了“这东西挺酷的”(我可以在调用另一个函数的时候直接写一个函数,真不错!)之外,我还没看到有什么特别有说服力的理由,告诉我为什么我真的需要或者想要使用它们。

在我看到的大多数例子中,它似乎更多的是一种风格或结构上的选择。而且有点打破了 Python 中“做事情只有一种正确方式”的规则。那它到底是怎么让我的程序更正确、更可靠、更快,或者更容易理解的呢?(我见过的大多数编码标准都建议避免在一行中写过于复杂的语句。如果这样做能让代码更容易阅读,那就把它拆开。)

16 个回答

18

对我来说,代码的表达能力很重要。当我们写代码时,其他人可能需要维护这些代码,所以代码应该尽量简洁明了,能够讲述一个故事。有时候,使用lambda表达式会让事情变得复杂,而有时候它能更直接地说明这一行或这一块代码在做什么。所以在写代码的时候要有判断力。

可以把它想象成构造一个句子。哪些部分是重要的(名词和动词与对象和方法等),它们应该如何排列,才能让这一行或这一块代码直观地传达它的功能。

21

在某些情况下,语法会更简洁,特别是处理 map 等功能时。

map(lambda x: x * 2, [1,2,3,4])

我觉得这个方式比下面的好:

def double(x):
    return x * 2

map(double, [1,2,3,4])

我认为在这种情况下使用 lambda 更合适,因为 def double 这个定义和使用它的 map 似乎有点不搭。再加上,使用完这个函数后,它就会被丢掉,这也是个好处。

不过,我觉得 lambda 有一个缺点,这限制了它在 Python 中的用处:lambda 只能有一行表达式(也就是说,你不能写多行代码)。在一个要求空格格式的语言中,这样是行不通的。

而且,每次我使用 lambda 的时候,我都觉得自己特别牛。

35

这里有一个很好的例子:

def key(x):
    return x[1]

a = [(1, 2), (3, 1), (5, 10), (11, -3)]
a.sort(key=key)

对比一下:

a = [(1, 2), (3, 1), (5, 10), (11, -3)]
a.sort(key=lambda x: x[1])

从另一个角度来看:Lambda 表达式也被称为“匿名函数”,在某些编程方式中非常有用,尤其是在函数式编程中,Lambda 演算为其提供了灵感。

http://en.wikipedia.org/wiki/Lambda_calculus

撰写回答