首页 > Python笔记 阅读数:12

Python lambda表达式(匿名函数)详解

在 Python 中,lambda 表达式被广泛使用,因此值得我们去探究一番。简单来说,lambda 表达式是只有一行代码的函数,由于它太过于短小,且用后即“焚”,不值得我们费心为之取名字,因此在其他编程语言中,这类函数也被称为“匿名函数”。

lambda 表达式的定义语法如下所示。

lambda 参数: 对参数实施的操作


在这里,lambda 是 Python 的关键字,首字母不可大写。冒号:左边为这个函数的参数,如果有多个参数,就用逗号,隔开。冒号右边就是用于计算的表达式,通过对参数进行计算,返回结果。

为对比说明 lambda 表达式的用法,我们先来定义一个普通的加法函数 add( )。
In [1]: def add(x, y):
   ...:     return x + y
In [2]: print(add(5, 19))
24
上述代码的 In [1] 处定义了 add( ) 函数,该函数功能简单,代码也非常简单。

因此,我们完全可以利用 lambda 表达式来完成相同的功能,代码如下:
In [3]: lambda x, y : x + y
Out[3]: <function _main_.<lambda>(x, y)>
从 In [3] 处可以看到,lambda 表达式的语法非常简单,符合 Python“简单即是美”的设计理念。从 Out[3] 的输出结果可以看出,lambda 表达式返回的就是一个函数对象,在 Python 中,一切皆对象,函数亦不例外。

我们可以把这个 lambda 表达式赋值给一个变量,如前所述,赋值操作可以决定被赋值对象的类型,所以这个变量在本质上也是一个函数,当我们使用这个变量时,实际上就是在调用lambda表达式。换句话说,上述操作让一个原本“匿名”的函数——lambda表达式,变得“有名”了。

示例代码如下。
In [4]: new_add = lambda x, y: x + y  #将lambda表达式赋值给new_add
In [5]: new_add(5, 19)     #把new_add当作一个普通函数来用
Out[5]: 24

由此,可以看出lambda表达式的优势如下:
但类似于lambda表达式这样的匿名函数有一个限制,就是它只能有一个表达式,因此无须通过return返回计算结果,表达式的结果就默认为返回值。

在 Python 中,函数式编程在 lambda 表达式、filter( )、map( ) 和 reduce( ) 中得到了很好的体现。lambda 表达式已经介绍过,下节就来说明它与其他函数如何配合使用,我们将结合几个好用的内置函数 filter()、map() 和 reduce(),来说明 lambda 表达式的妙用之处。

相关文章