python内建的高阶函数(hign oreder function)
python函数式编程基础(一):https://blog.csdn.net/Geroge_lmx/article/details/80740484
python函数式编程基础(二):https://blog.csdn.net/Geroge_lmx/article/details/80791803
满足下列条件中“一个”的函数即为高阶函数:
1.接收一个或多个函数作为参数传入
2.返回一个函数
二.map 函数:
格式:
map(func, *iterable):
作用:
用函数和可迭代对象中的每一个元素作为参数返回新的可迭代对象
备注:
1.func函数的形参个数必须和提供的可迭代对象的个数相同
2.当最短的一个可迭代对象不再提供数据时迭代结束
3.*ietrable获取任意多个可迭代对象,封装在一个元组中
4.map函数的第一个参数func,必须有返回值
实例1: >>>list(map(lambda x, y : x ** y, range(1,4),range(1,4))) >>>[1, 4, 27] #备注:map函数返回的是一个可迭代对象,为了验证结果,故使用list函数将其转换为列表
实例2: def mydict(key, value): dict_created = {} #创建dict_created字典 dict_created[key] = value #将传入的参数分别作为字典的键和值 return dict_created #返回一个字典 for dict_item in map(mydict, range(5), "abcde"): print(dict_item) 运行结果: {0: 'a'} {1: 'b'} {2: 'c'} {3: 'd'} {4: 'e'}三.filter 函数:
格式:
filter(function, ietrable)
---->参数function必须是一个可以返回bool值的函数或lambda表达式,这样才能对数据起到过滤作用
作用:
筛选可迭代对象中的数据,返回一个可迭代对象,此可迭代对象对iterable提供的数据进行筛选
备注:
函数function将对iterable中的每个元素进行求bool值,返回True则保留,返回False则丢弃
实例1:输出1-10之间可以被3整除的整数: #lambda x : x % 3 == 0表达式可以返回True/False >>> list(filter(lambda x : x % 3 == 0, range(1,10))) >>> [3, 6, 9]
实例2:输出0-100之间的素数: def is_prime(n): """判断n是否为素数""" if n < 2: return False else: for number in range(2,n): if n % number == 0: return False return True L = list(filter(is_prime, range(100))) print(L) 运行结果: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, ... 79, 83, 89, 97]四.sorted 函数:
格式:
sorted(iterable, key=None, reverse=False)------->返回值为列表
作用:
将原可迭代对象提供的数据进行排序,生成排序后的 “列表”
备注:
1.iterable是可迭代对象
2.key函数是用来提供一个排序参考值的函数,这个函数的返回值将作为排序的"依据"
3.reversed标志用来设置是否降序排序
实例1: #在交互模式下创建列表L >>> L = ['Alex', 'Bob', 'Thomas', 'Mathieu', 'Alihanda'] >>> L ['Alex', 'Bob', 'Thomas', 'Mathieu', 'Alihanda'] #按照字符串的长度降序排列 >>> sorted(L, key=len, reverse=True) ['Alihanda', 'Mathieu', 'Thomas', 'Alex', 'Bob']
实例2: L = [{'name':'Alex', 'score':90, 'age':23}, {'name':'Thomas', 'score':80, 'age':27}] #按成绩高低排序 update_L = sorted(L, key=lambda x : x['score'], reverse=True) print(update_L) #按年龄从大到小排序 update_L = sorted(L, key=lambda x : x['age'], reverse=True) print(update_L) #运行结果: [{'age': 23, 'score': 90, 'name': 'Alex'}, {'age': 27, 'score': 80, 'name': 'Thomas'}] [{'age': 27, 'score': 80, 'name': 'Thomas'}, {'age': 23, 'score': 90, 'name': 'Alex'}]小结:
1.map函数和filter函数返回的都是可迭代对象;sorted函数返回的是列表;
2.传入map函数的可迭代对象可以是任意多个,而传入filter函数的可迭代对象只能是一个;
3.map函数,filter函数中function形参为位置形参,sorted函数中function的传入使用关键字传参,key=function.