Lambda 函数是只能包含一个表达式的匿名函数。

你可能认为 lambda 函数是中级或高级功能,但在这篇文章里你将了解如何轻松地在代码中开始使用它们。

在 Python 中,函数通常是这样创建的:

def my_func(a):
  # function body

你用 def 关键字声明它们,给它们一个名字,然后添加由圆括号包围的参数列表。可能有很多行代码,里面有你需要的尽可能多的语句和表达式。

但有时你可能需要一个内部只有一个表达式的函数,例如一个将其参数加倍的函数:

def double(x):
  return x*2

这是一个可以与 map 方法一起使用的函数。

def double(x):
  return x*2
  
my_list = [1, 2, 3, 4, 5, 6]
new_list = list(map(double, my_list))
print(new_list) # [2, 4, 6, 8, 10, 12]

如何在 Python 中使用 lambda 函数

当你在短时间内需要一个小函数时,你可以使用 lambda 函数——例如作为高阶函数(如 mapfilter)的参数。

lambda 函数的语法是 lambda args: expression。你首先编写单词 lambda,然后是一个空格,然后是所有参数的逗号分隔列表,后跟一个冒号,然后是作为函数体的表达式。

请注意,你不能为 lambda 函数命名,因为它们根据定义是匿名的(没有名称)。

一个 lambda 函数可以有你需要使用的任意数量的参数,但主体必须是一个单一的表达式。

示例 1

例如,你可以编写一个将其参数加倍的 lambda 函数:lambda x: x*2,并将其与 map 函数一起使用,以将列表中的所有元素加倍:

my_list = [1, 2, 3, 4, 5, 6]
new_list = list(map(lambda x: x*2, my_list))
print(new_list) # [2, 4, 6, 8, 10, 12]

注意这个函数和我们上面用 double 函数编写的函数之间的区别。这个比较紧凑,没有多余的函数占用内存空间。

示例 2

或者,你可以编写一个 lambda 函数来检查数字是否为正数,例如 lambda x: x > 0,并将其与 filter 一起使用以创建仅包含正数的列表。

my_list = [18, -3, 5, 0, -1, 12]
new_list = list(filter(lambda x: x > 0, my_list))
print(new_list) # [18, 5, 12]

lambda 函数是在使用它的地方定义的,这样内存中就没有命名函数了。如果一个函数只在一个地方使用,那么可以使用 lambda 函数来避免混乱。

示例 3

你还可以从函数返回 lambda 函数。

如果你需要创建多个乘以数字的函数,例如加倍或三倍等,lambda 可以提供帮助。

你可以创建一个函数 multiplyBy 代替创建多个函数,如下所示,然后使用不同的参数多次调用该函数以创建两倍、三倍等的函数。

def muliplyBy (n):
  return lambda x: x*n
  
double = multiplyBy(2)
triple = muliplyBy(3)
times10 = multiplyBy(10)

lambda 函数从父函数中获取值 n,因此在 doublen 的值是 2,在 triple 中是 3,在 times10 中是 10。现在使用参数调用这些函数将乘以该数字。

double(6)
> 12
triple(5)
> 15
times10(12)
> 120

如果你没有在这里使用 lambda 函数,则需要在 multiplyBy 中定义一个不同的函数,如下所示:

def muliplyBy (x):
  def temp (n):
    return x*n
  return temp

使用 lambda 函数,可以写更少代码,并且更具有可读性。

结论

如果你的函数仅包含一个小表达式,则 Lambda 函数是一种编写函数的紧凑方法。初学者可能不会使用它,但在这里你已经看到如何在任何级别轻松使用它。

原文:Lambda Function in Python – Example Syntax,作者:Ilenia Magoni