Python基础-41-高阶函数map/reduce/filter/sorted

高阶函数

把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式

# lambda函数作为参数传入

def sum_func(x,y,func):
    res = func(x,y)
    return res

# 调用函数
print(sum_func(50,30,lambda x,y:x+y))

 

map()

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

 

# 定义一个计算平方的函数
def func(x):
    return x*x

# map函数返回的是一个map对象,需要list(map(fun,itor))来将映射之后的map对象转换成列表
res = map(func,[1,2,3,4,5])
print(list(res))  # 结果:[1, 4, 9, 16, 25]

 

reduce()

reduce()函数接收的参数和 map()类似,一个函数 f,一个可迭代对象,reduce()传入的函数 f 必须接收两个参数,reduce()对可迭代对象的每个元素反复调用函数f,并返回最终结果值。(需要先导入模块 from functools import reduce)

reduce(function, sequence, initial=None)

function:传入的函数名

sequence:tuple ,list ,dictionary, string等可迭代物,必需参数

initial:初始值, 可选参数,默认为None

from functools import reduce

# 定义一个函数,用来拼接字符串
def str_splic(str1,str2):
    return str1+str2
res = reduce(str_splic,["s","u","n","e","r"])
print(res)  # 结果为:suner

 

filter()

filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表

和map相似,filter()也接收一个函数和一个序列,把传入的函数依次作用于每个元素,将返回True的元素放到新列表中

def judge_func(x):
    if x>10:
        return True
    else:
        return False
# filter函数返回的是一个filter对象,需要list(filter(fun,itor))来将映射之后的filter对象转换成列表
res = filter(judge_func,[1,5,8,10,12,16])
print(list(res)) # 结果显示:[12, 16]

 

sorted()

sorted函数可以接收一个key函数来实现自定义的排序

key指定的函数将作用于list的每一个元素上,根据key函数返回的结果进行排序

 

L = [20,18,-5,0,3,49]
res = sorted(L,key=abs) # 按绝对值大小升序排列
print("升序结果:",res)  # 结果显示:[0, 3, -5, 18, 20, 49]

res1 = sorted(L,key=abs,reverse=True) # 降序只需要加上 reverse=True 即可
print("降序结果:",res1)  # 结果显示:[49, 20, 18, -5, 3, 0]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章