给定一个列表,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])

这里可以真正体会到函数式编程的便利

 

posted on 2013-04-20 14:51  andy071001  阅读(221)  评论(0编辑  收藏  举报