函数(三)
1.高阶函数
- 接受一个或者多个函数作为参数,并将函数作为返回值
- 当使用一个函数作为参数时,实际上是将指定的代码传递给了目标函数
lst = [1,2,3,4,5,6,7,8,9,10]
#定义一个函数用来检测任意数是否为偶数
def fn2(i):
if i % 2 == 0:
return True
2.闭包
- 通过闭包可以创建一些只有当前函数能够访问的变量,将一些私有数据藏到闭包中
- 形成闭包的条件:
- 函数嵌套
- 将内部函数作为返回值返回
- 内部函数必须使用到外部函数的变量
def fn():
a = 10
def fn2():
print('我是fn2',a)
return fn2
3.装饰器的引入
- 修改函数中的代码可以完成需求,但是会产生以下问题:
1.如果要修改的函数过多,修改起来比较麻烦
2.不方便后期的维护
3.违反开闭原则(ocp),这是程序的设计思想,要求开发对程序的扩展,要关闭对程序的修改
4.装饰器的使用
- 定义一个函数来对其他函数进行扩展,使其他函数可以在执行前打印开始执行,执行后打印执行结束
- 通过装饰器,可以在不修改原来的函数的情况下对函数进行扩展,并拓展函数的功能
- start_end(old)这一类函数就称之为装饰器
def fn():
print('我是fn函数') # 参数old 要扩展的函数对象
def add(a,b):
return a + b
def start_end(old):
def new_function(*args,**kwargs): # 创建一个新的函数
print('函数开始执行.....')
r = old(*args,**kwargs)
print('函数执行结束.....')
return r
return new_function # 返回函数
f = start_end(add)
r = f(123,456)
print(r)