为什么使用Lambda函数?
我看到很多内容在讲什么是 lambda 函数,语法怎么写等等。但是除了“这东西挺酷的”(我可以在调用另一个函数的时候直接写一个函数,真不错!)之外,我还没看到有什么特别有说服力的理由,告诉我为什么我真的需要或者想要使用它们。
在我看到的大多数例子中,它似乎更多的是一种风格或结构上的选择。而且有点打破了 Python 中“做事情只有一种正确方式”的规则。那它到底是怎么让我的程序更正确、更可靠、更快,或者更容易理解的呢?(我见过的大多数编码标准都建议避免在一行中写过于复杂的语句。如果这样做能让代码更容易阅读,那就把它拆开。)
16 个回答
对我来说,代码的表达能力很重要。当我们写代码时,其他人可能需要维护这些代码,所以代码应该尽量简洁明了,能够讲述一个故事。有时候,使用lambda表达式会让事情变得复杂,而有时候它能更直接地说明这一行或这一块代码在做什么。所以在写代码的时候要有判断力。
可以把它想象成构造一个句子。哪些部分是重要的(名词和动词与对象和方法等),它们应该如何排列,才能让这一行或这一块代码直观地传达它的功能。
在某些情况下,语法会更简洁,特别是处理 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 的时候,我都觉得自己特别牛。
这里有一个很好的例子:
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 演算为其提供了灵感。