Python中的高阶函数和其他语言一样分别有以下几个:
map(fn,List)//映射
;filter(fn,List);//过滤只返回满足条件的元素
sorted(List,key);//序列排序
reduce(fn,List)//两两对折,返回一个唯一数值
这几位在语法结构和参数的先后顺序上会同其他语言有所不同,但是在意义上并无二至。
scores = [98,78,32,31,55,90,79];
def passExam(arg):
return arg > 60;
check = list(filter(passExam,scores));
print(check)
上边这段代码是一段很简单的过滤学生成绩的代码,我们在这段代码中可以看出来filter()
函数的外面包裹了一个list()
函数,原因就在于filter()
函数过滤后都是16进制的数据,需要list()
函数进行转换。map()
函数一样如此。
在reduce()
的用法中有一个坑,那就是py2和py3的不兼容。
scores = [98,78,32,31,55,90,79];
def sum(argA,argB):
return argA+argB;
allStudents = reduce(sum,scores);
print(allStudents)
上面是一个很简单的py2的reduce求学生总分的算法。但是在py3版本中就会报错。这是由于py3版本中reduce已经从内置函数中删除,必须从functool中import进来。
最后,我们来看下排序算法,sorted()
:
我们可以看下最普通的排序:
scores = [98,78,32,31,55,90,79];
sort = sorted(scores);
print(sort)
//[31, 32, 55, 78, 79, 90, 98]
这就比js这种还要自己编写函数的不知道高到哪里去了,可以直接对数字进行排序。
我们再看看下面这段代码:
scores = [98,-8,-32,-31,55,90,79];
sort = sorted(scores,key=abs);
print(sort)
//[-8, -31, -32, 55, 79, 90, 98]
这段代码的核心点在于key=abs
这个作为第二个参数的赋值表达式。它表示在排序时,给元素按照绝对值进行排序。因为这个功能,所以Python在排序方面比其他很多语言都要强大很多,比如可以根据字母的大小写,'Z'>'a'
进行大小写分类,也可以忽略大小写str.lower
.也可以添加第三个参数reverse= True
进行反向排序。