学习python大家都知道,python有形形色色的库能给我们的开发工作带来很大的方便,同样也有一些函数如果用起来也能够大大的提高我们的效率,这次我们就来认识一下python的几个高阶函数。
- filter(function_or_none, sequence)函数 :顾名思义就是起到一个过滤作用,它的作用就是会对你传入其中的数组的元素按照特定的函数处理后再返回一个数组,这个处理的函数会将满足条件的数组元素进行返回。接下来咱们看参数,第一个参数就是function_or_none,意思是一个函数或者是none,如果是一个函数那么function(item) is true的元素会被返回,如果是none那么return the items that are true就是返回为true的那些元素,第二个参数sequence是一个序列,可以是list数组或者tuple元组以及String,其实String也可以理解成一种特殊的数组了。接下来咱们看一个具体的实例,帮助大家更好的理解:
通过列表推导式生成了一个1-10的数组,然后filter做的事情就是过滤出偶数的元素,你看只需要两行代码搞定,是不是很简单?filter的第一个参数我们用了lamabda表达式一种函数的简写,当然如果有业务要求我们可以写一个很复杂的函数来进行过滤,也是一样子的a = [x for x in range(1, 11)] print(filter(lambda x: x % 2 == 0, a))
- map(function, sequence, *sequence_1)函数:来看它的参数第一个参数是function,也是需要传入一个函数,后面的则是一个不定长的序列,就是你可以传入不止一个数组进去,该函数的作用就是将后面序列中的元素循环传入前面的function经过处理后返回,是每一个元素否会返回,并不是说满足什么条件才会返回,依然来看个例子 :
可以看到上面的map我们就传入了两个数组,做的事情就是将两个数组对应位置处的元素相加,有些同学会问了,如果两个数组元素数量不同怎么办?那么它就会以元素少的那个为准了,多余的元素会被舍弃的a = [x for x in range(1, 11)]; def fun(x, y): return x * y print map(fun, a, a)
- reduce(function, sequence, initial=None)函数:它的第一个参数仍然是一个函数了,第二个参数是一个序列,同样的它还有第三个参数initial初始化参数,reduce的作用就是按照你传入的第一个function函数作用从左到右作用于你传入的sequence中的每个元素,说这比较抽象,我们还是来举个例子比较好懂些:
上面代码的意思就是求出了 1+2+...+9+10的结果,并且在此结果上再加1,最终得出结果为56,所以reduce函数作用就是按照函数代码就从左至右先取出两个元素,第一次是1和2相加,然后拿着这个结果再跟第三个元素相加,直到最后,后面的那个1就是我们初始化的值,意思就是在最终的结果上再+1,相当于跟数组多了一个元素似得,如果前面是x*y则最后是再乘以1,是跟前面函数有关的,同样的,如果前面的数组为空,那么最终返回的就是这个初始化的值a = [x for x in range(1, 11)]; print reduce(lambda x, y: x + y, a, 1)