Lambda 表达式(也称为匿名函数)是函数式编程中的核心概念之一。其基本语法是:
lambda
arguments : expression
它包括三个部分: · Lambda 关键字 · 函数将接收的参数 · 结果为函数返回值的表达式
主要优点:1.不需要定义函数名(匿名函数);2.代码简洁美观;3.适用于定义简单的计算。
主要缺点:1.只是一个运算式,不适用于复杂逻辑;2.不够直观易懂,提高了维护成本。
1.命名使用
如果我们只需要一个简单的函数,lambda 是一个很好的选择,因为它可以被看作是定义函数的一种更简单的方法。因此,我们可以给它一个名称,并像普通函数一样使用它。
1 2 3 4 5 6 7 8 |
|
如上面的例子所示,add_ten() 和 lambda_add_ten() 方法的结果是相同的,但是 lambda 函数可以使我们的代码更短更清晰。
2. 与高阶函数配合
如果我们可以将 lambda 函数与 map()、 filter()和 reduce()等高阶函数一起使用,那么程序将变得更加优雅。
让我们来看下面这个问题:打印列表中所有的奇数
1 |
|
初级程序员可能会编写如下代码:
1 2 3 4 5 6 |
|
然而,一个高级 Python 程序员只需要一行代码就可以做同样的事情:
1 2 |
|
它看起来更优雅,不是吗?(当然,还有其他的单行解决方案,比如列表解析:)
1 |
|
3.赋予“key”参数
一些内置方法具有关键的参数,这些参数给我们提供了更多的灵活性。
例如,当我们使用 sorted()或 sort()方法对 Python 中的迭代进行排序时,关键参数决定如何比较迭代中的两个元素。
1 2 3 | leaders = ["Ren zhengfei", "Suoluo", "Elon Musk"] leaders.sort(key=lambda x: len(x)) print(leaders) # ['Suoluo', 'Elon Musk', 'Ren zhengfei'] |
如上,若要按照名称的长度对列表排序,一个简单的方法是向 key 参数传递一个 lambda 函数。
另一个常见场景是根据字典的键或值对其进行排序。
1 2 3 4 | leaders = {4: "Suoluo", 2: "Elon Musk", 3: "Tim Cook", 1: "Ren zhengfei"} leaders_list = sorted(leaders.items(), key=lambda x: x[0]) leaders = dict(leaders_list) print(leaders) # {1: 'Ren zhengfei', 2: 'Elon Musk', 3: 'Tim Cook', 4: 'Suoluo'} |
4.立即调用
立即调用的函数表达式(IIFE)是 JavaScript 中的一种习惯用法。Python 中的 lambda 函数也支持。立即运行一个 lambda 函数,如下所示:
1 2 |
|
但,最好只在 Python 的交互式解释器中使用这个技巧。
如果你熟悉Python中的下划线技巧,则也可以使用以下方式。
1 2 3 4 |
|
5.在闭包中使用
闭包是一个功能强大的函数式编程特性,在 Python 中也可以使用。因为它是关于嵌套函数的,所以我们可以使用 lambda 函数来使程序更加清晰。如例:
1 2 3 4 5 6 7 | def outer_func(): Live = outer_func()("China") |
我们该如何使用 lambda 函数来简化上面的代码?
1 2 3 4 5 | def outer_func(): Live = outer_func()("China") |
可见,当我们使用嵌套函数时,lambda 函数可以帮助我们编写更易读和清晰的代码。
总结
Python 中的 lambda 函数为我们提供了更多的灵活性和方法设计选项,但是注意无需过度使用。