python装饰器,简单的说就是用于操作底层代码的代码,在不改变底层代码函数的情况下对底层代码进行验证操作等
首先,必须知,道调用func和func的区别,分别为返回函数所在的内存地址和调用该函数,输出执行结果,例如:
def func(): print("欢迎光临!!!") print("返回函数所在的内存地址:",func) func()
列举一个简单的web页面调用例子
1 #做登录验证 2 def login(func): 3 print("登录成功") 4 return func 5 6 def index(name): 7 print("欢迎【%s】光临首页!"@name) 8 def tv(name): 9 print("欢迎【%s】光临电视页!"@name) 10 def tv(): 11 print("欢迎光临电视页!") 12 13 tv=login(tv) 14 tv()
由上述代码可知,为了进行登录验证,需要进行额外的操作,改变了使用部门的操作,有没有办法直接让使用部门使用tv()来调用验证呢?
1 ef login(func): 2 def inner(*args): 3 print("登录成功") 4 func(*args) 5 return inner 6 7 @login 8 def index(name): 9 print("Welcome %s to Index"% name) 10 @login 11 def tv(name,password): 12 print("Welcome %s to TV"% name) 13 # def tv(): 14 # print("Welcome %s to TV") 15 def moive(name): 16 print("Welcome %s to Movie"% name) 17 18 # tv=login(tv) 19 # tv() 20 tv("Eric","123") 21 index("EEric")
函数执行:函数首先顺序执行login,然后调转到@login,将index信息传入内存,返回index所调用的inner 函数,然后继续执行下面的函数,返回tv所调用的内部函数inner,继续执行下面的moive函数,然后继续执行下方调用,返回到inner继续执行inner内部语句,并调用函数的执行;
装饰器的作用:即不改变原有底层函数的内部逻辑,来实现对底层函数的操作