不同语言之间的共同特点
- 不同点
- 语法,运行环境和库的使用等
- 相同点
- 语言层面:编程方法和模式,那些场景适合什么方法和模式
- 底层:数据结构(存储操作)和算法(对数据进行统计分析等)
- 高层:各种应用需要的原理,机器学习,网络通信,爬虫
函数式编程,一切皆对象
-
函数式编程关心数据的映射,命令式编程关心解决问题的步骤
-
映射,一种东西和另一种东西之间的对应关系,也就是说一个函数的值仅决定于函数参数的值,不依赖其他状态
-
把函数当做变量去操作,作为操作单元可直接赋给变量,有属性和方法,如同操作数据一样操作函数
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))
网友评论