函数式编程的核心就是把函数当成对象来进行编程。
有两个常用到的方法:map/reduce,filter,其中map和filter是内建方法,而reduce不是,所以需要import相关模块。
map接收两个参数,第一个参数是函数(处理办法),第二个参数是一个可迭代对象,而map可以把第二个参数的变量映射到函数中一一进行处理,结果以list形式返回。
In [147]: def f(x): .....: return x*x .....: In [148]: r = map(f,[1,2,3,4,5,6]) In [149]: list(r) Out[149]: [1, 4, 9, 16, 25, 36]
reduce接收两个参数,第一个参数是函数(处理办法),第二个参数是一个可迭代对象,而reduce可以把第二个参数每一次next方法执行的结果映射到函数中进行处理,然后返回一个计算后的值。其实质就是不断的嵌套把此层函数作为下一层函数的参数直到最后。
In [151]: from functools import reduce In [152]: def add(x,y): .....: return x+y .....: In [153]: reduce(add,[1,3,4,7,9]) Out[153]: 24 In [154]: reduce(add,[1]) Out[154]: 1
filter接收两个参数,第一个参数是函数(处理办法),第二个参数是一个可迭代对象,而map可以把第二个参数的变量映射到函数中,根据true/false过滤,结果以list形式返回。
In [156]: def is_odd(n): .....: return n % 2 == 1 .....: In [157]: list(filter(is_odd, (1, 2, 4, 5, 6, 9, 10, 15))) Out[157]: [1, 5, 9, 15]