1.在一个函数内部的函数,同时引用了外部函数的变量,绑定了外部变量的过程就叫闭包(对数据的操作封装了起来)

2.装饰器:不影响原有功能的前提下,可以添加新功能,可以用来调用无法修改的第三方API

 a.外部闭包函数的参数是被封装修饰器的函数对象。

 b.返回的是装饰函数+新增的装饰功能。

 c.可以理解为装饰器设计模式。

案例:

# 构建模拟事务处理装饰器
# 一.函数1: 删除数据功能
def delete():
    print("删除数据功能")
# 函数2: 增加数据功能
def add():
    print("增加数据功能")
# 二.需要新增功能检查数据是否存在
def user_chexk(func):
    def f1():
        print("检查数据是否存在")
        func()
    return f1
# 三.使用闭包给函数1和2添加功能
use1=user_chexk(delete)
use1()
print(use1)

use2=user_chexk(add)
use2()
print(use2)

#四:使用装饰器给函数1和2添加功能
@user_chexk
def delete2():
    print("删除数据功能--使用装饰器")
delete2()

@user_chexk
def add2():
    print("增加数据功能--使用装饰器")
add2()

运行结果:

函数式编程二(闭包和装饰器)_封装