python之lambda函数
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+yadd(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 reduceprint(reduce(lambda x,y:x+y,range(1,101)))#5050#求1~100之和,再加上10000from functools import reduceprint(reduce(lambda x,y:x+y,range(101),10000))#150503.闭包一个定义在函数内部的函数,内部函数使用了外部函数的临时变量,并且外部函数的返回值是内部函数的引用。def outer(a): b=10 def inner(): # 内部函数 print(a+b) return inner # 外函数的返回值是内函数的引用outer(5) |

浙公网安备 33010602011771号