高阶函数(map、reduce、filter、sorted)

高阶函数:

变量可指向函数,可通过调用变量来调用函数

f=abs #把函数复制给变量
f(-10) #结果10

函数名其实就是指向函数的变量
因变量可指向函数,函数参数能接收变量,那么一个函数可以接收另一个函数作为参数,这个函数就叫高阶函数

def add(x, y, f):
	return f(x) + f(y)
add(3,-5,abs)
map()

map接收2个参数一个函数,一个Iterable,将传入函数依次作用到传入序列的每个元素,并把结果作为新的Iterator返回

map(fn,Iterable)

map(str,['1','34']) #返回一个Iterator惰性序列,要计算出来用list()

reduce()

reduce接收两个参数一个函数,一个Iterable,把一个函数做用在一个序列上,该函数必须接收两个参数,reduce把结果继续和序列下一个元素进行累积计算

reduce(fn(x,y),Iterable)

示例:将一个字符串转换成数字‘12.21’

def str_float(s)
	bignum,smallnum=s.split('.')
	def str_num(str)
		mydic={'0':1,'1':1,'2':2...}
		return mydic[s]
	def fn(x,y)
		return x*10+y
	up_num=reduce(fn,map(str_num,bignum))
	lo_num=reduce(fn,map(str_num,smallnum))/10**len(smallnum)
	return up_num+lo_num
filter()

filter函数用于过滤序列,接收两个参数,一个函数一个可迭代对象Iterable,函数作用于序列的每个元素,根据函数返回True或False,决定保留还是丢弃该元素。返回的是满足条件的新序列,是一个Itertor惰性序列

def not_empty(s):
return s and s.strip()
list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))
#返回['A', 'B', 'C']
sorted() 排序
sorted()也是一个高阶函数。用sorted()排序的关键在于实现一个映射函数。

排序的核心是比较两个元素的大小,如果是数字可以直接比较,字符串默认是ASCII码大小排序

1.默认排序

sorted函数可以对list进行排序

sorted([1,34,2,4,78])
2.自定义规则排序,key函数

此外sorted也是一个高阶函数可以接收一个key函数实现自定义排序,key函数作用于每个元素并根据key函数返回结果进行排序,再按照对应关系返回原始list相应的元素

sorted([1,34,2,-56,4],key=abs)
#返回[1,2,4,34,-56]
sorted(['bob', 'about', 'Zoo', 'Credit'])# 字符串排序默认按照首字母ASCII编码大小
#返回['Credit', 'Zoo', 'about', 'bob']
sorted(['bob', 'about', 'Zoo', 'Credit'],key=lower) #忽略大小写排序
3.反向排序:传入第三个参数reverse=True,则逆向排序

例子

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def fn(s):
	name,score=s
	return name.lower()
print(sorted(L,key=fn)) #按名字排序

def fn(s):
	name,score=s
	return score
sorted(L,key=fn) #按成绩排序
posted @ 2021-09-22 18:17  qxll  阅读(126)  评论(0)    收藏  举报