又称匿名函数lambda :是指一类无需定义标识符(函数名)的函数或子程序。
lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。
语法:
1 lambda [arg1 [,arg2,.....argn]]:expression
args:函数将接收的参数
expression:结果为函数返回值的表达式
冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式(只能为一个)。其实lambda返回值是一个函数的地址,也就是函数对象。
举例:将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数
1 2 3 4 5 6 7 8 def sum (x,y ): return x+y print (sum (1 ,2 ))sum = lambda x,y : x+yprint (sum (1 ,2 ))
由于它的简单性,lambda 函数可以使Python 代码在某些场景中更优雅。下面是Python 中 lambda 函数的5个常见用法。
命名使用
1 2 3 4 5 6 7 8 9 lambda_add_ten = lambda x: x + 10 print (lambda_add_ten(5 )) def add_ten (x ): return x + 10 print (add_ten(5 ))
与map()、 filter()和 reduce()等高阶函数配合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 numbers = [1 , 12 , 37 , 43 , 51 , 62 , 83 , 43 , 90 , 2020 ] odd_number = [] for n in numbers: if n % 2 == 1 : odd_number.append(n) print (odd_number)odd_numbers = [i for i in numbers if i % 2 == 1 ] print (list (filter (lambda x: x % 2 == 1 , numbers)))
赋予key参数使用
使用 sorted()或 sort()方法对 Python 中的迭代进行排序时,关键参数决定如何比较迭代中的两个元素
1 2 3 4 leaders = ["Jerry" , "Tom" , "Jerry Zhang" , "Edward Li" ] leaders.sort(key=lambda x: len (x)) print (leaders)
1 2 3 4 leaders = {4 : "Edward Li" , 2 : "Tom" , 3 : "Jerry Zhang" , 1 : "Jerry" } leaders = dict (sorted (leaders.items(), key=lambda x: x[0 ])) print (leaders)
直接调用
1 2 3 4 5 6 7 (lambda x,y:x*y)(2 ,3 ) lambda x,y:x*y_(2 ,3 )
闭包中使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 def outer_func (): person = "Jerry" def print_person (location="" ): return person + " in the " + location return print_person Lead = outer_func()("China" ) print (Lead)def outer_func (): person = "Jerry" return lambda location="" : person + " in the " + location Lead = outer_func()("China" ) print (Lead)
总之,lambda 函数为提供了更多的灵活性和方法设计选项。熟悉常见用法,正确使用,不要过度使用。