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 )
|