定义一个普通函数,起码需要def关键字+函数名+函数体。而lambda可定义一个匿名函数。
>>> add = lambda x,y:x+y >>> type(add) <type 'function'>
lambda,是Python的一个预留关键字。lambda,只是个表达式,起到一个函数速写的作用。lambda的主体是一个表达式,而不是一个代码块,可在lambda表达式中封装有限的逻辑。
lambda的语法是唯一的、固定的:lambda agument_list:expression,这就是一个函数了。
- lambda,Python预留关键字;
- argument_list,参数列表,与函数的参数列表是一样的。如:a,b;a=1,b=2;*args;××kwargs;a,b=1,*args;空,等等;----这是输入,即传入到argument_list的值。
- expression,一个关于参数的表达式,表达式中出现的参数都需要在argument_list中有定义,表达式必须是单行的。----这是输出,即根据表达式expression计算得到的值。
lambda匿名函数的4个应用场景:
1、将lambda函数赋值给一个变量,通过这个变量间接地调用该lambda函数
>>> add = lambda x,y:x+y >>> add(1,2) 3
2、将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换
3、将lambda函数作为其他函数的返回值,返回给调用者。函数的返回值也可以是函数。这时,lambda函数就是内部函数了,可以访问外部函数的局部变量。
return lambda x:x+y
4、将lambda函数作为参数传递给其他函数。
有部分Python内置函数接收函数作为参数:
- filter():filter(lambda x:x%3==0, [1,2,3,4,5,6,7,8,9]),此时lambda函数作为过滤列表元素的条件,将列表中能否3整除的元素过滤出来。
>>> filter(lambda x:x%3==0, [1,2,3,4,5,6,7,8,9]) [3, 6, 9]
- sorted():sorted([1,2,3,4,5,6,7,8,9], key=lambda x:abs(5-x)),此时lambda函数用于指定列表中所有元素进行排序的准则,将列表按照 元素跟5的距离从小到大进行排序。
>>> 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]
- map():map(lambda x:x+1, [1,2,3]),此时lambda函数用于指定对列表中每一个元素所进行的共同操作,即将列表中的每一个元素加1。
>>> map(lambda x:x+1, [1,2,3])
[2, 3, 4] >>> map(lambda x:True if x % 3 == 0 else False, range(10)) [True, False, False, True, False, False, True, False, False, True]
- reduce():reduce(lambda a,b:'{},{}'.format(a,b), [1,2,3,4,5,6,7,8,9]),此时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'
注意:lambda匿名函数 异常处理程序try...except。