1.高阶函数
第一个特点:接受一个或多个函数作为参数
第二个特点,将函数做为返回值返回
接收函数作为参数
lst = [1,2,3,4,5,6,7,8,9,10]
#定义一个函数,可以将制定的列表中所有偶数,保存到一个新的列表中并返回
#当我们使用一个函数作为参数,实际上是指将制定的代码传递进了目标函数
#定义一个函数,判断是否为偶数
def fn1(i):
if i % 2 ==0
return True
return False
#定义一个函数,判断是否为奇数
def fn2(i):
if i % != 0:
return True
return False
#定义一个数是否被3整除
def fn3(i):
if i % 3 == 0:
return True
return False
#定义一个函数用了检查是否大于5
def fn4(i):
if i > 5:
return True
retrun False
def fn(func,lst):
#参数lst,要进行筛选列表
#创建一个新的列表
new_lst = []
for i in lst:
#判断n的奇偶数
if func() :
new_lst.append(i)
return new_lst
print(fn(fn1,lst)) # [2, 4, 6, 8, 10]
print(fn(fn2,lst)) #[1, 3, 5, 7, 9]
print(fn(fn3,lst)) #[3, 6, 9]
print(fn(fn4,lst)) [6, 7, 8, 9, 10]
2.闭包
将函数作为返回值返回,我们也称之为闭包
def fn()
#在函数内部定义一个函数
def fn2():
print('我是fn2')
#将内部函数作为返回值返回
return fn2
r = fn()
r() 我是fn2
形成闭包的条件
1.函数嵌套
2.将内部函数作为返回值返回
3.内部函数必须要使用到外部函数的变量
3.装饰器
我们可以直接通过修改函数中的代码来完成需求,但是会产生以下一些问题,
1.如果修改的函数多,修改起来会比较麻烦
2.不便于后期维护
3.这样会违反开闭原则(ocp)
程序设计,要求开放对程序的扩展,要关闭对程序的修改
同通过装饰器,可以在不修改原来函数的情况下对函数进行扩展,
在开发过程中,我们都是通过修改装饰器来扩展函数的功能