函数式编程
说到函数式编程,我们的重点在于为什么要采用函数式编程,而不是什么是函数式编程。
函数式编程的优点:一、天然的支持并发编程,能够避免死锁、饥饿等线程安全问题(Because of no-mutation)。二、写法简洁,通常多行的代码只需一行就能搞定。
在Python中,匿名函数是函数式编程的基础。
匿名函数
顾名思义,也就是没有名称的函数。如下所示,就是一个匿名函数,它指代的是f(x) = -x
lambda x:-x
函数中的世界里有很多的分段函数。那该如何表示呢?
lambda x:-x if x<0 else x
那如果是三个分支呢?
lambda x:-x if x<0 else (x if x>0 else 0)
map、reduce、filter、sorted
map函数其实就是一个映射函数,将集合(包括元组、列表、集合等结构)中的每一个数据进行映射,然后得到结果,保存到列表中。
data = range(-10, 10)
map(lambda x:x**2, data)
reduce函数是累积函数,每次取出列表中的一个元素,然后和当前值进行计算,得到一个值,再拿该值与列表的下一个元素进行运算,直到得到最终结果。(其中第一步是取出初始值和列表的第一个元素进行运算,默认初始值为0)
data = range(-10, 10)
reduce(max, data, 0)
filter函数是过滤函数,只保留符合列表中符合条件的元素,并保存到一个新的列表中。
data = range(-10, 10)
filter(lambda x:x>-5 and x<5, data)
sorted函数是排序函数,默认是升序排列,如果我们要写成降序的话,就要新写一个函数。具体如下所示:
reversed_cmp = lambda x,y:-1 if x>y else(1 if x<y else 0)
sorted(range(-10,10), reversed_cmp)
reduce(lambda x,y : x+y, [1,2,3,4,5], 0)
其中x表示的是累积结果,y表示是每次从list中取出一个元素