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

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

  • 相关阅读:
    php后门隐藏技巧
    给你的PHP大马添加后门(黑吃黑)
    分析 PHP大马-php_mof SHELL
    过WAF菜刀制作
    eval与php一句话的关系
    php一句话转发脚本(可能过狗= =)
    wmic与mimikatz技巧
    LPK后门
    grunt常用插件的使用
    jquery实现后台系统左侧菜单的点击展开/收缩二级菜单效果
  • 原文地址:https://www.cnblogs.com/andy071001/p/3032608.html
Copyright © 2011-2022 走看看