装饰器:在不改变原代码并且不修改代码结构的情况下,拓展功能(本质是一个闭包,一种函数的使用方式)
最简单的装饰器格式:
(不带参数)
def 装饰器名称(fn):
def func(*args,**kwargs):
原代码前需要执行的代码
fn(*args,**kwargs)
原代码后需要执行的代码
return func
(带参数)
def 装饰器名称(fn):
def func(*args,**kwargs):
原代码前需要执行的代码
res=fn(*args,**kwargs)
原代码后需要执行的代码
return res
return func
调用方式有两种:
1.普通调用
def 目标函数():
pass
ls=装饰器名称(目标函数) #ls为自定义变量
ls()
2.注释语法调用(推荐使用)
@装饰器名称
def 目标函数():
pass
目标函数()
示例如下:
要求:在登录函数中加入登录时间功能
def login():
print("登录成功")
import time #导入时间模块
def timer(fn):
def func():
fn()
start=time.strftime("%Y-%m-%d-%X",time.localtime())
print("现在时间是:",start)
return func
@timer
def login():
print("登录成功")
login()
结果:
#结语:学无止境