lambda 就是匿名函数,简单来说就是定义函数的一种方式,但是是用来定义逻辑简单函数的
在Python中,lambda的语法如下:
lambda argument_list: expression
argument_list:是一个可以容纳任意数据类型的参数列表
expression:是一个关于参数的表达式,将前面的argument_list中每个元素取出来,作为入参进行处理
lambda的输入为argument_list的参数,输出为expression的结果即为该函数的return值
在实际中,根据这个lambda函数应用场景的不同,可以将lambda函数的用法扩展为以下几种:
1.将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。
add=lambda x, y: x+y
add(1,2)
<<<<<3
定义了加法函数lambda x, y: x+y,并将其赋值给变量add,这样变量add便成为具有加法功能的函数。然后执行,输出为3。
2.将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换(即为简单的函数重写)。
time.sleep=lambda x=None
执行time.sleep(3)时,程序不会休眠3秒钟,而是什么都不做。
3.将lambda函数作为其他函数的返回值,返回给调用者。 函数的返回值也可以是函数。
def test_a():
return lambda x, y: x + y
print(test_a()(2, 3))
>>>>>5
4.将lambda函数作为参数传递给其他函数。(可以理解为筛选参数的一段逻辑)
这就要说到我们经常使用的4个函数了
1.filter函数:对入参分别执行定义的lambda函数,返回值为符合逻辑的***入参***
filter(function, sequence):对sequence中的item依次执行 function(item),将执行结果为True的item组成一个List、String、Tuple(取决于sequence的类型)返回
filter(lambda x: x % 3 == 0, [1, 2, 3])
>>>>>[3]
2.map函数:对入参分别执行定义的lambda函数,返回值为符合逻辑的***结果***
map(function, sequence) :对sequence中的item依次执行function(item),见执行结果组成一个List返回:
map(lambda x: x+1, [1, 2, 3])
>>>>[2, 3, 4]
3.reduce函数:对入参列表(至少有2个元素)中两两相邻元素执行定义的lambda函数,返回值为最后的***结果***
reduce(function, sequence[, initial]):对sequence中的item顺序迭代调用 function,如果有 initial,还可以作为初始值调用
首先注意下现在python3.x reduce使用需要先导入 from functools import reduce
from functools import reduce
reduce(lambda x, y : x+y, range(1,4)) #返回 6 = 1+2+3
>>>>6
reduce(lambda x, y : x+y, range(1,4), 10) #返回 16 = 1+2+3 (+10)
>>>>16
4.sorted函数:对入参分别执行定义的lambda函数,返回值为符合逻辑的***入参***,且按照升序排列
sorted(sequence,key=function):对sequence中的item依次执行function,且按照执行后结果,入参进行升序排列
sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))
>>>>[5, 4, 6, 3, 7, 2, 8, 1, 9]
以上即为我对于lambda函数的总结
不过现在pep8已经不建议使用lambda,而是推荐使用def去定义一个函数
因为它影响了代码可读性的基本原则!!!