lambda函数又称为匿名函数,匿名函数就是没有函数名的函数。
1
2
|
>>> lambda x,y:x + y <function < lambda > at 0x7f0f0dd85578 > |
x,y是函数的两个变量,位于冒号的左边,冒号右边的表达式是函数的返回值。
1
2
3
4
5
|
>>> add = lambda x,y:x + y >>> add <function < lambda > at 0x7f0f0dd855f0 > >>> add( 1 , 2 ) 3 |
等同于函数
1
2
3
|
def add(x,y): return x + y add( 1 , 2 ) |
lambda的使用场景
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
1. 函数式编程 #例如:一个整数列表,要求按照列表中元素的绝对值大小升序排列 list1 = [ 3 , 5 , - 4 , - 1 , 0 , - 2 , - 6 ] print ( sorted (list1,key = abs )) print ( sorted (list1,key = lambda x: abs (x))) 2.python 中最常见的 filter 筛选、 map 小刷子、 reduce 合并,都可以用 lambda 表达式来生成。对于序列来讲,有三个函数式编程工具: filter ()、 map ()、 reduce () map (function,sequence):把sequence中的值当参数逐个传给function,返回一个包含函数执行结果的 list 。如果function有两个参数,即 map (function,sequence1,sequence2)。 #求1~20的平方 print ( list ( map ( lambda x:x * * 2 , range ( 1 , 21 )))) #[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400] filter (function,sequence):对sequence中的item依次执行function(item),将执行结果为 True 的item组成一个 List / String / Tuple (取决于sequence的类型)返回。 #求1~20之间的偶数 print ( list ( filter ( lambda x:x % 2 = = 0 , range ( 1 , 21 )))) #[2, 4, 6, 8, 10, 12, 14, 16, 18, 20] reduce (function,sequence):function接收的参数个数只能为 2 ,先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给function,然后只返回一个结果。 #求1~100之和 from functools import reduce print ( reduce ( lambda x,y:x + y, range ( 1 , 101 ))) #5050 #求1~100之和,再加上10000 from functools import reduce print ( reduce ( lambda x,y:x + y, range ( 101 ), 10000 )) #15050 3. 闭包 一个定义在函数内部的函数,内部函数使用了外部函数的临时变量,并且外部函数的返回值是内部函数的引用。 def outer(a): b = 10 def inner(): # 内部函数 print (a + b) return inner # 外函数的返回值是内函数的引用 outer( 5 ) |