简介
lambda表达式,又称匿名函数,主要的作用是为了节省结构体的复杂书写,同时可以省略掉函数名字,最主要可以和一些python中一些函数配合使用,来让代码更加简洁。但只能写一行表达式。
简单使用
g = lambda x,y:2*x+y
print(g(1,2))
形式为lambda 参数:表达式,然后使用的时候直接类似于函数一样调用就可以,不过比函数的效率高。
将lambda表达式作为返回值
类似于函数指针一样,lambda表达式可以在函数中作为返回值直接返回,见下面代码。
def get_square():
#返回lambda表达式
return lambda n:n*n
g = get_square()
print(g(2))
接下来介绍一种可以省略函数名让代码变简介的情况:
def get_math_func(type):
# 定义三个局部函数
def square(n):
return n*n
def cube(n):
return n*n*n
def factorial(n):
return (1+n)*n/2
# 返回局部函数
if type == "square":
return square
if type == "cube":
return cube
else:
return factorial
# 调用get_math_func(),程序返回一个嵌套函数
math_func = get_math_func("cube")
print(math_func(5)) # 输出125
math_func = get_math_func("square")
print(math_func(5)) # 输出25
math_func = get_math_func("other")
print(math_func(5)) # 输出15.0
显然在上面代码中,square、cube、factorial三个局部函数可以用lambda表达式来替换,这样就不需要对函数进行起名,代码也会变得更加整洁,见下图。
def get_math_func(type):
if type == "square":
return lambda n:n*n
if type == "cube":
return lambda n:n*n*n
else:
return lambda n:(1+n)*n/2
# 调用get_math_func(),程序返回一个嵌套函数
math_func = get_math_func("cube")
print(math_func(5)) # 输出125
math_func = get_math_func("square")
print(math_func(5)) # 输出25
math_func = get_math_func("other")
print(math_func(5)) # 输出15.0
与其它函数配套使用
主要与一些内置函数配套使用,如filter,map,reduce。
filter函数
语法为:filter(function, iterable),其中iterable可以为列表字符串或元组,逐一对元素通过function的条件进行筛选,然后保留下满足条件的数据。python3返回的是一个迭代器,可以用list进行转换得到输出结果。
nums = [1, 2, 3, 4, 5]
new_nums = filter(lambda n: n > 2, nums)
print(list(new_nums))
输出:
[3, 4, 5]
map函数
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
map() 函数语法:
map(function, iterable, ...)
其中function是映射函数,iterable可以有一个或多个,见下面样例。
nums = [1, 2, 3, 4, 5]
new_nums = map(lambda n: n ** 2, nums)
print(list(new_nums))
输出:
[1, 4, 9, 16, 25]
nums = [1, 2, 3, 4, 5]
nums_2 = [2, 3, 4, 5, 6]
new_nums = map(lambda x, y: x + y, nums, nums_2)
print(list(new_nums))
输出:
[3, 5, 7, 9, 11]
reduce函数
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
reduce() 函数语法:
reduce(function, iterable)
from functools import reduce
nums = [1, 2, 3, 4, 5]
new_nums = reduce(lambda x, y: x + y, nums)
print(new_nums)
输出:
15