高阶函数


函数的参数也是一个函数,就称为高阶函数

1.map

1.概述

map(func,*Iterable)

'''
参数1是一个函数,参数2是一个可迭代的对象,例如列表
将参数2里面的每一个元素作为参数传入到参数1这个方法中
最后返回一个新的列表

注意:*参数2是个不可数的,可以传递多个列表。那么此时对应的参数1函数的参数也一一对应
'''

2.实例

单个Iterable(可迭代对象)
a = [1,2,3,4,5,6,7,8,9]
# 将列表中每个元素转为字符串
m = map(str,a)
print(list(m)) # ['1', '2', '3', '4', '5', '6', '7', '8', '9']
多个Iterable(可迭代对象)
a=[1,2,3,4]
b=[10,20,30]
# 求这两个列表同索引元素的和
def fun(x,y):
    return x+y
m=map(fun,a,b)
print(list(m)) # [11, 22, 33]

2.reduce

1.概述

reduce(func,Iterable)

"""
reduce(参数1,参数2)
参数1是一个函数,并且固定有两个参数。参数2是一个列表
运行情况:第一次将参数2里面的前两个元素作为参数传入到参数1的函数中。
第二次将第一次参数1函数的返回值作为第一个参数,再将参数2里的第三个元素作为第二个参数再次传入到参数1的函数中
以此类推。。。。。
最后返回参数1函数的最终返回值
"""

2.实例

from  functools import reduce

a=[1,2,3,4,5,6,7,8,9,10]

#计算一个序列的求和
def sum(x,y):
    return x+y

r = reduce(sum,a)
print(r)#55
from  functools import reduce

a=[1,3,5,7,9]

#把序列a变成整数13579 将列表中每个元素乘10加上后一个元素
def fun(x,y):
    return x*10+y

r = reduce(fun,a)
print(r)#13579

3.filter

1.概述

filter(func,Iterable)

'''
filter(参数1,参数2)
参数1是一个函数,固定有一个参数。参数2是一个列表
将参数2里面的每一个元素作为参数传入到参数1这个函数中
返回结果为真,就放入新列表,直到参数2的列表元素都传入了
最后返回一个新的列表
'''

2.实例

a=[1,2,3,4,5,6,7,8,9,10]

#在一个列表中,删掉偶数,保留奇数
def is_odd(n):
    return n%2 == 1

f=filter(is_odd,a)
print(list(f)) # [1, 3, 5, 7, 9]
a=["A","","B",None,"C","   "]

#一个序列中的阿空字符串删掉
def not_empty(s):
    return s and s.strip()

f=filter(not_empty,a)
print(list(f)) # ['A', 'B', 'C']

4.sorted

1.概述

sorted(Iterable[,reverse][,key])

'''
sorted(参数1[,reverse][,key])
参数1是一个列表
将参数1里面的元素进行排序
reverse是逆序排列,默认是False
key是传入一个函数,参数固定一个。将参数1中的每一个元素传入key这个函数中
返回一个新的排序后列表
'''

2.实例

基础用法
#对数值进行排序

#默认升序
s = sorted([42,422,4,2,-100,3,-10])#reverse=False
print("默认升序",s) # 默认升序 [-100, -10, 2, 3, 4, 42, 422]

#逆序排序
s = sorted([42,422,4,2,-100,3,-10],reverse=True)
print("降序",s) # 降序 [422, 42, 4, 3, 2, -10, -100]
#对字符串进行排序 ASCII码来判断
s = sorted(["abc","ad","ABC","D","d","C"])#reverse=False
print("默认升序",s) # 默认升序 ['ABC', 'C', 'D', 'abc', 'ad', 'd']
高级用法
#sorted是高阶函数,他还可以接收一个key函数来实现自定义的排序

#对数值列表,按绝对值的大小排序
s = sorted([42,422,4,2,-100,3,-10],key=abs)#reverse=False
print("默认升序",s) # 默认升序 [2, 3, 4, -10, 42, -100, 422]
str_list=['ab','a','abcde','abcd','abc']

#自定义按照字符串长度排序
print(sorted(str_list,key=lambda x:len(x))) # ['a', 'ab', 'abc', 'abcd', 'abcde']