高阶函数:1.可以使用函数对象作为参数的函数。
2.可以将函数作为返回值的函数。
函数对象:①定义好的函数,使用函数名调用(不加括号)
②将函数作为参数的高阶函数,通过传入不同的函数,可以使执行的结果完全不同结果,如下所示
def add(f,x,y):
return f(x) + f(y)
print(add(lambda x:x**2,3,4))
print(add(lambda x:str(x),3,4))
print(add(lambda x:x/2 ,3,4))
③内置高阶函数(map)
map(func,list) (map生成器对象),将函数作用在list的每一个序列上
# map的实现原理
def my_map(f,lis):
new_list = []
for i in lis:
new_list.append(f(i))
return new_list
print(my_map(lambda x:x**0.5,range(1,10)))
装饰器函数:1.修改增加其他函数的功能的函数
特点:不修改原函数的代码
一个装饰器函数可以给多(n)个函数添加或修改相同的功能
2.装饰器函数的实现方法:装饰器函数是一个高阶函数,是一个嵌套函数,它把原函数作为参数,将内部函数作为返回值。
3.将原函数替换为内部函数。原函数在内部函数中执行保留原函数的功能。
4.有参装饰器(给无参装饰器上再加一层函数用于接收参数。)
如下案列:给一个函数增加开头加入“开始执行...”和结尾加入“结束执行...
def log_info(function):
def run(*args,**kwargs):
print("开始执行...")
res = function(*args,**kwargs)
print("执行结束....")
return res
return run
@log_info # 装饰器语法糖
def func1(n):
for i in range(0,n,2):
print(i,end=" ")
print()
return "Ok"
print(func1)
# log_info(func1)(20) 运用装饰器函数第二种语法写法