Python函数式编程——apply()、filter()
一周前介绍了Python函数式编程中的匿名函数lambda,然后这一周忙了一些其他事情,以至于昨天晚上才写了一篇文章。今天继续Python函数式编程这个话题,介绍内建函数apply()
和filter()
。
介绍这两个内建函数主要是为了后面介绍map()
和reduce()
做准备,其中apply()
已经被有效取代,filter()
部分可由列表解析list comprehension代替。
下面的文章本来在12个小时之前已经写好了,结果点击发布之后被提示无权限编辑,由于之前已经关了自动保存,结果就都没了,只好重新写。
1.apply()
格式:apply( func[, nkw[, kw]] )
该函数的目的是将非关键字参数和关键字参数传入到func函数中调用,其中nkw是非关键字参数,kw是关键字参数,返回值是函数调用的返回值。
然而,由于目前的Python中,已经可以在函数调用中使用非关键字参数和关键字参数作为可变长参数调用,apply()已经被从Python1.6开始被摒弃淘汰。因此,此处仅对该函数进行一个大致的介绍,而不具体深入,也不应在编程中再使用该函数。
2.filter()
格式:filter( func, seq )
该内建函数的作用相当于一个筛子。func函数是一个布尔函数,filter()
调用这个布尔函数,将每个seq中的元素依次过一遍筛子,选出使func返回值是Ture的元素的序列。
下面举一个例子进行说明,假设我这里有一些学生的成绩,现在要选出成绩在[80, 90)区间里的成绩。下面的例子讲使用不同的方法进行实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
scores = [55, 80, 83, 64, 91, 100, 90, 79] def score_filter( score ): return score >=80 and score < 90 # 普通方法 filtered_score = [] for each in scores: if score_filter( each ): filtered_score.append( each ) print filtered_score # [80, 83] # filter()方法 print filter( score_filter, scores ) # [80, 83] # 列表解析list comprehension方法 print [score for score in scores if score >=80 and score < 90] # [80, 83] |
这里还使用了一种列表解析的方法,虽然看起来没有filter()
的方法简洁,但是相对于普通方法也足够简洁了,而且列表解析的方法不止可以适用于filter()
的情况,也可以适用于更多的情况,并且可以在列表解析中使用更复杂的条件,灵活性更好。
接下来,还将继续讲解map()
和reduce()
的使用。
暂无评论