lambda函数是一种“一行式”的函数,适用于处理一些小型函数,避免了为了一小段代码而额外定义一个有名称的函数。本文将介绍Python中的匿名函数。
匿名函数的特点
-
匿名函数不需要定义名称,而普通函数需要定义名称。
-
匿名函数只能包含一行表达式,而普通函数可以有多行表达式。
-
匿名函数执行完成后自动返回结果,而普通函数需要使用return关键字才能返回结果。
使用匿名函数lambda
lambda函数的使用方法是“lambda 参数: 表达式”。例如,下面的代码中,lambda函数执行的结果等同于定义的hello函数。
def hello(title):
print(title)
hello('oxxo') # oxxo
(lambda title: print(title))('oxxo') # oxxo
使用多个参数
lambda函数支持多个参数,使用时不需要用小括号包围参数,如果有多个参数,使用逗号分隔每个参数。此外,如果函数中有返回值,在lambda函数中不需要编写return语句,计算完成后就会自动返回值。
下方的程序里,lambda 函数执行的结果等同于 hello 函数,会计算出 x+y 的数值。
def hello(x, y):
return x+y
a = hello(1,2)
b = (lambda x, y: x+y)(1,2)
print(a) # 3
print(b) # 3
lambda函数可以赋予一个变量作为名称(函数名),使用时就像调用函数一样,但要注意lambda函数只能编写“一行代码”,因此只适用于较小型的程序。
下方的程序里,lambda 函数 b 执行的结果等同于 a 函数,会计算出 x+y 的数值。
def a(x, y):
return x+y
b = lambda x, y: x+y
print(a(1,2)) # 3
print(b(1,2)) # 3
搭配 for 循环
下方的程序将 lambda 函数 y 与 for 循环搭配 ,效果等同于 x 函数。
def x(n):
a = list(range(n))
return a
y = lambda n: [i for i in range(n)] # 计算后返回列表结果
print(x(5)) # [0, 1, 2, 3, 4]
print(y(5)) # [0, 1, 2, 3, 4]
搭配 if 判断语句
下方的程序将 lambda 函数 y 与 if 判断语句搭配 ,效果等同于 x 函数。
def y(n):
if n<10:
return True
else:
return False
x = lambda n: True if n<10 else False # 判断是否小于 10,返回 True 或 False
print(x(5)) # True
print(y(5)) # True
搭配 map 方法
下方的程序将 lambda 函数和 map 方法搭配,产生一个新的 b 列表,b 列表的元素是 a 列表元素的平方。
a = [1,2,3,4,5,6,7,8,9]
b = map(lambda x: x*x, a)
print(list(b)) # [1, 4, 9, 16, 25, 36, 49, 64, 81]
搭配 filter 方法
下方的程序将 lambda 函数 filter 方法搭配,filter 方法会将 True 的元素留下,所以新列表的元素都会是大于 5 的数字。
a = [1,2,3,4,5,6,7,8,9]
b = filter(lambda x: x>5, a)
print(list(b)) # [6, 7, 8, 9]
搭配 sorted 方法
下方的程序将 lambda 函数 sorted 方法搭配,当 sorted 方法设置 key 参数时,会根据 key 进行排序,所以会根据阵列中第二个元素的大小进行排序。
a = [[1,2],[4,3],[5,1],[9,2],[3,7]]
b = sorted(a, key = lambda x: x[1])
print(list(b)) # [[5, 1], [1, 2], [9, 2], [4, 3], [3, 7]]