zoukankan      html  css  js  c++  java
  • 避免冗余代码的好方法——函数作为参数

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

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

  • 相关阅读:
    Calendar来进行一个时间段内每天的判断
    关于PreparedStatement的setDate的了解
    git学习--创建标签
    git学习--bug分支
    hibernate(1)
    JavaScript(三)---- 控制流程语句
    JavaScript(二)---- 变量、数据类型和运算符
    JavaScript(一)---- 概述
    css(四)-- 盒子模型和定位
    css(三)-- 常用属性
  • 原文地址:https://www.cnblogs.com/andy071001/p/3032608.html
Copyright © 2011-2022 走看看