函数式编程是使用一系列函数去解决问题,按照一般编程思维,面对问题时我们的思考方式是“怎么干”,而函数函数式编程的思考方式是我要“干什么”。在Python中有lambda,map,reduce,filter等内置方法。
语法
lambda args: expression
参数(args)的语法与普通函数一样,同时表达式(expression)的值就是匿名函数调用的返回值;而lambda表达式返回这个匿名函数。
原始方法
L1 = [1,-9,6,6,7]
L2 = []
for i in range(len(L1)): #模拟经典for循环
if L1[i] > 0:
lst2.append(L2[i])
使用匿名函数的函数式方法
L2 = filter(lambda n: n > 0, L1)
map函数是每次只对一个数据进行处理
Map接受一个方法和一个集合作为参数。它创建一个新的空集合,以每一个集合中的元素作为参数调用这个传入的方法,然后把返回值插入到新创建的集合中。最后返回那个新集合。
def to_lower(item):
return item.lower()
# name = map(lambda n: n.lower(),['LeaSon','Baidu','Qq'])
name = map(to_lower,['LeaSon','Baidu','Qq'])
print name
>>> ['leason', 'baidu', 'qq']
Reduce函数每次是需要对两个数据进行处理的,
Reduce 接受一个方法和一个集合做参数。返回通过这个方法迭代容器中所有元素产生的结果。
第一次迭代在这之前没有迭代结果传进来。reduce() 使用集合中的第一个元素作为第一次迭代
def add(a,b):
return a+b
# result = reduce(lambda a,b:a+b,[1,2,3])
result = reduce(add,[1,2,3])
print result
>>> 6
函数式编程特点:
1)代码更简单了。
2)数据集,操作,返回值都放到了一起。
3)你在读代码的时候,没有了循环体,于是就可以少了些临时变量,以及变量倒来倒去逻辑。
4)你的代码变成了在描述你要干什么,而不是怎么去干。
leason | 个人博客