python高级函数的闭包和装饰器

1.高级函数

接收函数作为参数,或者将函数作为返回值的函数就是高级函数

list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]  #列表
def fn1(k):     #定义一个3的倍数的函数
    if k%3==0:
        return True
    return False
def fn2(i):     #定义一个2的倍数的函数
    if i % 2 == 0:
        return True
def fn3(j):		#定义一个函数 判断是否大于5
    if j > 5:
        return True
    return False
#使用一个函数作为参数 可以将制定的代码传递进了目标参数
def fn(func,list):
    # 创建新列表
    new_st = []
    for a in list:
        if func(a):  #使用一个 函数作为参数
            new_st.append(a)
    return new_st

print(fn(fn1,list))   #3的倍数
print(fn(fn2,list))   #2的倍数
print(fn(fn3,list))   #大于5的数

python高级函数的闭包和装饰器_第1张图片

2.闭包

将函数作为返回值也是高阶函数 我们也称为闭包。
闭包的优点:

  • 通过闭包可以创建一些只有当前函数能访问的变量。
    可以将一些私有数据藏到闭包中。

形成闭包的条件:

  • 函数嵌套
  • 将内部函数作为返回值返回
  • 内部函数必须要使用到外部函数的变量


3.装饰器的引入

我们可以直接通过修改函数中的代码来完成需求,但是会产生以下一些问题:

  • 如果修改的函数多,修改起来会比较麻烦
  • 不方便后期维护
  • 这样做会违反开闭原则(ocp)
    程序的设计,要求开发对程序的扩展,要关闭对程序的修改

4.装饰器的使用

  • 通过装饰器,可以在不修改原来函数的情况下来对函数进行扩展
  • 在开发中,我们都是通过装饰器来扩展函数功能的

你可能感兴趣的:(python)