给定一个列表,lst = range(1,5),要求列表各项的和
如果按照通常的方法,可以这么干:
sum = 0
for i in lst:
sum += i
sum就是想要的结果
如果是写成函数,那就是:
def sum_list(lst):
sum = 0
for i in lst:
sum += i
return sum
ok,现在又有了一个新的需求,就是要求列表各项的乘积,可以这么干:
def mul_list(lst):
pro = 1
for i in lst:
pro *= i
return pro
观察以上这两个函数,发现代码基本相同,只有初始值和迭代的运算方法不同
那么,本能地就可已想到,可以把这两者抽象出来,作为某个函数的参数传入,而该函数可以解决这两个(以及更多)问题。
我们定义一个名为reduce_的函数,函数具体内容如下:
def reduce_(function, lst, initial):
iter = initial
for i in lst:
iter = function(iter, i)
return iter
如果要求lst各项的和,那么可以这么调用:
reduce_(lambda x,y: x+y, lst, 0)
如果要求lst各项的积,可以这么干:
reduce_(lambda x,y: x*y, lst, 1)
那么如何利用reduce_求lst的最大值呢?
很简单!
可以这么干:
reduce_(lambda x,y: x if x > y else y, lst, lst[0])
这里可以真正体会到函数式编程的便利