lambda( )函数
一、Python lambda() 函数
Lambda函数也被称为匿名(没有名称)函数,它直接接受参数的数量以及使用该参数执行的条件或操作,该参数以冒号分隔,并返回最终结果。为了在大型代码库上编写代码时执行一项小任务,或者在函数中执行一项小任务,便在正常过程中使用lambda函数。
lambda
关键字可以用来创建一个 lambda 函数,紧跟其后的是参数列表和用冒号分割开的单个表达式。例如,lambda x: 2 * x
是将任何输入的数乘2,而 lambda x, y: x+y
是计算两个数字的和。
这个lambda()函数采用以下形式:
lambda argument_list:expersion
argument_list
是参数列表,它的结构与Python
中函数(function
)的参数列表是一样的.expression
是一个关于参数的表达式,表达式中出现的参数需要在argument_list
中有定义,并且表达式只能是单行的。
匿名函数使用注意点:
1.不要返回任何值
2.不要忘记更好的选择
3.不要将它赋值给变量
4.不要忘记列表推导式
二、普通函数与 lambda() 函数的区别
1.没有名称
Lambda函数没有名称,而普通操作有一个合适的名称。**
2.Lambda函数没有返回值
使用def
关键字构建的普通函数返回值或序列数据类型,但在Lambda函数中返回一个完整的过程。假设我们想要检查数字是偶数还是奇数,使用lambda函数语法类似于下面的代码片段。
b = lambda x: "Even" if x%2==0 else "Odd"
b(9)
3.函数只在一行中
Lambda函数只在一行中编写和创建,而在普通函数的中使用缩进
4.不用于代码重用
Lambda函数不能用于代码重用,或者不能在任何其他文件中导入这个函数。相反,普通函数用于代码重用,可以在外部文件中使用。
下面是一些lambda函数示例:
lambda x, y: xy;函数输入是x和y,输出是它们的积xy;
lambda:None;函数没有输入参数,输出是None;
lambda *args: sum(args); 输入是任意个数的参数,输出是它们的和(隐性要求是输入参数必须能够进行加法运算);
lambda **kwargs: 1;输入是任意键值对参数,输出是1。
三、Python lambda() 函数的四种用法
1.将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数;
c=lambda x,y,z:x*y*z
c(2,3,4)
>> 24
也可以在函数后面直接传递实参:
(lambda x:x**2)(3)
>> 9
2.将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数;
3.将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数;
4.将lambda函数作为参数传递给其他函数。
**filter函数。**此时lambda函数用于指定过滤列表元素的条件。例如filter(lambda x: x % 3 == 0, [1, 2, 3])指定将列表[1,2,3]中能够被3整除的元素过滤出来,其结果是[3]。
fliter(lambda x:x%3==0,[1,2,3,4,5,6])
>> [3,6]
**sorted函数。**此时lambda函数用于指定对列表中所有元素进行排序的准则。例如sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))将列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素与5距离从小到大进行排序,其结果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。
创建由元组构成的列表:
a=[('b',3),('a',2),('d',4),('c',1)]
# 按照第一个元素排序
sorted(a,key=lambda x:x[0])
>> [('a',2),('b',3),('c',1),('d',4)]
# 按照第二个元素排序
sorted(a,key=lambda x:x[1])
>> [('c',1),('a',2),('b',3),('d',4)]
**map函数。**此时lambda函数用于指定对列表中每一个元素的共同操作。例如map(lambda x: x+1, [1, 2,3])将列表[1, 2, 3]中的元素分别加1,其结果[2, 3, 4]。
**reduce函数。**此时lambda函数用于指定列表中两两相邻元素的结合条件。例如reduce(lambda a, b: ‘{}, {}’.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])将列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素从左往右两两以逗号分隔的字符的形式依次结合起来,其结果是’1, 2, 3, 4, 5, 6, 7, 8, 9’。
from functools import reduce
print(reduce(lambda a,b:'{},{}'.format(a,b),[1,2,3,4,5,6,7,8,9]))
>> 1,2,3,4,5,6,7,8,9
另外,部分Python库函数也接收函数作为参数,例如gevent的spawn函数。此时,lambda函数也能够作为参数传入。