美文网首页
【Python】-013-函数-函数式编程-1

【Python】-013-函数-函数式编程-1

作者: 9756a8680596 | 来源:发表于2017-08-03 00:45 被阅读1次

    不同语言之间的共同特点

    • 不同点
      • 语法,运行环境和库的使用等
    • 相同点
      • 语言层面:编程方法和模式,那些场景适合什么方法和模式
      • 底层:数据结构(存储操作)和算法(对数据进行统计分析等)
      • 高层:各种应用需要的原理,机器学习,网络通信,爬虫

    函数式编程,一切皆对象

    • 函数式编程关心数据的映射,命令式编程关心解决问题的步骤

    • 映射,一种东西和另一种东西之间的对应关系,也就是说一个函数的值仅决定于函数参数的值,不依赖其他状态

    • 把函数当做变量去操作,作为操作单元可直接赋给变量,有属性和方法,如同操作数据一样操作函数

        my_sum = sum
        sum([1,2,3])  //6
        my_sum([1,2,3])  //6
        sum.__name__  //'sum'
        my_sum.__name__  //'sum'
        sum.__call__  //决定了变量能否被调用<method-wrapper '__call__' of builtin_function_or_method object at 0x1002dad88>
        my_sum.__call__ //<method-wrapper '__call__' of builtin_function_or_method object at 0x1002dad88>
      
      //函数当做参数,函数f1的参数中包含另一个函数f,函数f1称为高阶函数
      //将之前语句中的列表解析和for循环对比,修改为高阶函数形式
      import time
      def listComph():
        return [(i, j, i+j) for i in range(100) for j in range(100) if i+j > i*j]
      def forLoop():
        a = []
        for i in ragne(100):
          for j in range(100):
            if i+j > i*j:
              a.append(i, j, i+j)
        return a
      def testTime(max_loop, func):
        min_time = 100000
        total_time = 0.0
        for loops in range(max_loop):
          start_time = time.clock()
          results = func()
          end_time = time.clock()
          run_time = end_time - start_time
          total_time = total_time + run_time
          if min_time > run_time:
            min_time = run_time 
        print 'The results is: ',results
        print 'The fastest loop time is: ',min_time
        print 'The avrage loop time is: ', (total_time)/max_loop
      
      if __name__ == "__main__":
        print "List:"
        testTime(500, listCom)
        print "ForLoop:"
        testTime(500, forLoop)
      
      //函数式的另一个例子,适用性更广泛
      // 分别求 f1(a,b,c,d) = (a+b)*c-d
      // 和 f2(a,b,c,d) = (a+b)*(c-d)
      //结构式写法
      def f1(a, b, c, d):
        return (a+b)*c-d
      def f2(a, b, c, d):
        return (a+b)*(c-d)
      //函数式写法,当需要扩展时,函数式优势明显,而过程式需要再写一个function
      def f_add(a, b):
        return a+b
      def f_sub(a, b):
        return a-b
      def f_mul(a, b):
        return a*b
      def g_cal(f, a, b):
        return f(a, b)
      a, b, c, d = 1, 2, 3, 4
      print "f1(a,b,c,d): ",f1(a,b,c,d)
      print "f2(a,b,c,d): ", f2(a,b,c,d)
      print  "(a+b)*c-d: ", g_cal(f_sub, g_cal(f_mul, f_add(1,2), 3), 4)
      print "(a+b)*(c-d): ", g_cal(f_mul, g_cal(f_add, 1, 2), g_cal(f_sub, 3, 4))
      

    相关文章

      网友评论

          本文标题:【Python】-013-函数-函数式编程-1

          本文链接:https://www.haomeiwen.com/subject/csqklxtx.html