python 高阶函数学习, map、reduce
一个函数可以接收另一个函数作为参数,这样的函数叫做高阶函数。
函数map():
map()函数接收两个参数,一个是函数,一个是Iterable, map把函数作用于序列的每一个元素,并把结果作为Iterator返回。
注意,返回的是生成器Iterator,所以取返回值的时候需要用for,或者next,或者通过list序列化之后才能取出来
举例:
def f(x):
return x * x #定义一个函数f(x),返回值是两个数的乘积
r = map(f, [1, 2, 3, 4, 5, 6]) #通过map函数让f(x)作用于后面序列的每一个元素
print('print(r)', r) #直接打印r,得到的是r变量指向的地址
==》print(r) <map object at 0x02658A30>
print('list(r) = ', list(r)) #把r序列化之后返回一个list输出
==》list(r) = [1, 4, 9, 16, 25, 36]
#通过for循环输出
for n in r:
print(n)
==》
1
4
9
16
25
36
#通过next()输出:
while True:
try:
print(next(r))
except StopIteration as e:
print(e.value)
break
==》
1
4
9
16
25
36
None
reduce(f, [])函数:
需要传入两个参数,一个是函数f,这个函数f必须有两个参数,作用于后面的参数。reduce把计算的结果继续作用于f和序列的下一个元素
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
举例1:
def f(x, y): #定义一个函数,这个函数必须有两个参数
return x * y #返回值是两个数的乘积
#把函数f作为参数传入reduce函数
print(reduce(f, [1, 2, 3, 4]))
==》24
解析:
第一步:f(1, 2),输出的结果是1 * 2 = 2
第二步:第一步输出的结果被当做第二步的第一个参数传入计算 f(2, 3),输出的结果是 2 * 3 = 6
第三步:同理第二步 f(6, 4) => 6 * 4 = 24
举例2:
def MySum(x, y):
return x + y
print(reduce(MySum, [1, 2, 3, 4, 5]))
==》1+2+3+4+5=15