高阶函数(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) #按成绩排序
本文来自博客园,作者:qxll,转载请注明原文链接:https://www.cnblogs.com/qxll/p/15318968.html

浙公网安备 33010602011771号