1 什么是装饰器
- 给已有函数增加额外功能的函数,它本质上就是一个闭包函数(不是闭包,闭包特指内部函数)。
- 装饰器的功能特点:
① 不修改已有函数的源代码;
② 不修改已有函数的调用方式;
③ 闭包函数有且只有一个参数,必须是函数类型,这样定义的函数才是装饰器;
④ 给已有函数增加额外的功能;
⑤ 写代码要遵循开放封闭原则,它规定已经实现的功能代码不允许被修改,但可以被扩展。
2 装饰器的基本雏形
def decorator(fn): # fn:目标函数
def inner():
'''执行函数之前'''
fn() # 执行被装饰的函数
'''执行函数之后'''
return inner
给comment
函数添加一个登录验证的功能
def check(fn):
def inner():
print("请登录....")
fn()
return inner
def comment():
print("正在发表评论")
comment = check(comment) # 使用装饰器来装饰函数
comment()
comment()
comment()
===运行结果:=======================================================================
请登录....
正在发表评论
请登录....
正在发表评论
请登录....
正在发表评论
3 装饰器的语法糖写法
语法糖的书写格式是: @装饰器名字(装饰器的执行时间:加载模块时,立即执行
)
def check(fn):
def inner():
print("请登录....")
fn()
return inner
@check # @check <===> comment = check(comment)
def comme