Python Lambda 表达式

在 Python 中, 使用 lambda 关键字创建小巧的匿名函数。使用 lambda 创建的匿名函数称为 lamba 表达式,它只是常规函数的语法糖。

在 Python 中, 使用 lambda 关键字创建小巧的匿名函数。使用 lambda 创建的匿名函数称为 lamba 表达式,它只是常规函数的语法糖。

Lambada 表达式语法

lambda 关键字用于创建 lambda 表达式。Lambada 表达式语法如下:

lambda arguments : expression

说明:

  • arguments: 是匿名函数的参数列表,多个参数使用逗号 , 分隔。
  • expression: 是运算表达式。
  • lambda 表达式是一个匿名函数,运算表达式 expression 的计算结果作为匿名函数的返回值。

以下示例展示了一个参数的 lambda 表达式:

x = lambda a : a + 10
print(x(5)) # 15

以下示例展示了多个参数的 lambda 表达式:

x = lambda a, b : a * b
print(x(5, 6)) # 30
x = lambda a, b, c : a + b + c
print(x(5, 6, 2)) # 13

为什么要使用 Lambda 函数?

当将它用作另一个函数中的匿名函数时,可以更好地展示 lambda 的威力。

假设我们有一个需求,能灵活的将给定的数字加倍,但是倍数在不同的场景下是不同的,我们就可以通过一个返回匿名函数的常规函数来达到目的。

函数定义如下:

def myfunc(n):
  return lambda a : a * n

下面的场景下,需要将数字变为二倍:

def myfunc(n):
  return lambda a : a * n

mydoubler = myfunc(2)

print(mydoubler(11)) # 22
print(mydoubler(12)) # 24

下面的场景下,需要将数字变为三倍:

def myfunc(n):
  return lambda a : a * n

mytripler = myfunc(3)

print(mytripler(11)) # 33
print(mytripler(12)) # 36

而下面的场景中,既有二倍又有三倍:

def myfunc(n):
  return lambda a : a * n

mydoubler = myfunc(2)
mytripler = myfunc(3)

print(mydoubler(11)) # 22
print(mytripler(11)) # 33

当短时间内需要匿名函数时,请使用 lambda 函数。

列表排序

Python 列表章节提到,列表的 sort() 方法可以通过 键函数 来实现按照自定义的规则对列表排序,其中这个键函数就可以使用 lambda 表达式。

根据数字与 50 的接近程度对列表进行排序:

def myfunc(n):
  return abs(n - 50)

thislist = [100, 50, 65, 82, 23]
thislist.sort(key = myfunc)
print(thislist) # [50, 65, 23, 82, 100]

上面的例子中,不使用 lambda 表达式时,需要定义一个常规函数。现在使用 lambda 表达式改造一下。 代码如下:

thislist = [100, 50, 65, 82, 23]
thislist.sort(key = lambda n : abs(n - 50))
print(thislist) # [50, 65, 23, 82, 100]

改造后的代码精简了很多。由此,我们可以看出,lambda 表达式很适合这种使用一次的函数或者短时间内使用匿名函数的场景。