一.概述

  高阶函数,就是一个函数可以接收另一个函数作为参数的函数,或者接受一个或多个函数作为输入并输出一个函数的函数。scala与之类似。

二.自带常用高阶函数

1.map

#map(f, Iterable):f:要执行的操作,Iterable:可循环def mapFunction(arg):    return len(arg)# 调用内置高阶函数map,获取每个字符串的长度test = ['python', 'tensorflow', 'keras', 'tensorboard', 'tensorflow', 'tensorflow', 'keras']maps = list(map(mapFunction, test))print("各个字符串的长度为:{}".format(maps))

输出结果:




python math 绝对值 python中绝对值函数_并集


2.reduce

# filter(f,Iterable):函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。#该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,#最后将返回 True 的元素放到新列表中。# 过滤为空的字符串,不修改满足条件的数据def del_empty(s):    return s and s.strip() #strip()用于移除字符串头尾指定的字符(默认为空格或换行符)filterList = list(filter(del_empty, [" a", "", "b ", None, "v", " "]))print(filterList)

输出结果:


python math 绝对值 python中绝对值函数_c++绝对值函数_02


3.filter

# filter(f,Iterable):函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。#该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,#最后将返回 True 的元素放到新列表中。# 过滤为空的字符串,不修改满足条件的数据def del_empty(s):    return s and s.strip() #strip()用于移除字符串头尾指定的字符(默认为空格或换行符)filterList = list(filter(del_empty, [" a", "", "b ", None, "v", " "]))print(filterList)

输出结果:


python math 绝对值 python中绝对值函数_并集_03


4.groupby

from pandas import DataFrame
# 创建测试数据,将字典转换成为DataFrame
df = DataFrame({'a':[1,2,2,1],'b':[2,2,2,2],'c':[1,3,3,2],'d':[2,2,1,4]})show2 = df.groupby(['a','b','c'])['c'].agg(['max','min','mean'])
show3 = df.groupby(['b','a','c'])['c'].agg(['max','min','mean'])
print(df)
print(show2)print('=====================================')
print(show3)

输出结果:


python math 绝对值 python中绝对值函数_python math 绝对值_04


python math 绝对值 python中绝对值函数_字符串_05


5.sorted

#基础print(sorted([36, 5, -12, 9, -21])) #数字型按大小print(sorted(["36", "5", "-12", "9", "-21"])) #字符串按ASCII码#进阶print(sorted([36, 5, -12, 9, -21], key=abs))#先取绝对值,再排序(不影响原数据)print(sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)) #先转成小写,按转置排序(不影响原数据)

输出结果:


python math 绝对值 python中绝对值函数_并集_06


三.自定义高阶函数  

import randomfrom functools import reduce#定义普通函数,自动生成列表def getList():    hList = list(range(5))    return [key * random.randint(0,3) for key in hList] #生成随机数#定义普通函数,求不同列表中最大并集def getMaxSet(listA,listB):    setA = set(listA) #转为set    setB = set(listB)    setAll = setA | setB #求并集    return list(setAll)#转为list#定义高阶函数def highFunction(listA,listB,getMaxSet):    return getMaxSet(listA,listB)# 获取两个集合listA = getList()print("集合A:{}".format(listA))listB = getList()print("集合B:{}".format(listB))# 获取两个集合的并集listC = getMaxSet(listA, listB)print("集合A和集合B的并集:{}".format(listC))#调用高阶函数values = highFunction(listA,listB,getMaxSet)print("调用高阶函数获取集合A和集合B的并集:{}".format(values))

输出结果:


python math 绝对值 python中绝对值函数_高阶函数_07


四.总结

  不管是Python自带的高阶函数还是自定义的高阶函数,从代码上看都是对函数的二次封装,把函数当做参数、返回值;它映射一个函数到另一个函数,从而使函数式编程更加的游刃有余。