高阶函数
把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式
# 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]