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 函数——例如作为高阶函数(如 map
或 filter
)的参数。
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
,因此在 double
中 n
的值是 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