标签:time 一个 ret %s code wrapper 加载顺序 基于 对象
一、多个装饰器
1、当一个被装饰的对象同时叠加多个装饰器时规则:
(1) 装饰器的加载顺序是:自下而上
(2)装饰器内wrapper函数的执行顺序是:自上而下
import time def timmer(func): #func=wrapper2的内存地址 def wrapper1(*args, **kwargs): print(‘===================================>wrapper1运行了‘) start=time.time() res = func(*args, **kwargs) #===========================>跳到wrapper2去执行了, stop=time.time() print(‘run time is %s‘ %(stop - start)) return res return wrapper1 def auth(engine=‘file‘): def xxx(func): # func=最原始那个index的内存地址 def wrapper2(*args, **kwargs): print(‘===================================>wrapper2运行了‘) name=input(‘username>>>: ‘).strip() pwd=input(‘password>>>: ‘).strip() if engine == ‘file‘: print(‘基于文件的认证‘) if name == ‘egon‘ and pwd == ‘123‘: print(‘login successfull‘) res = func(*args, **kwargs) return res elif engine == ‘mysql‘: print(‘基于mysql的认证‘) elif engine == ‘ldap‘: print(‘基于ldap的认证‘) else: print(‘错误的认证源‘) return wrapper2 return xxx @timmer # index=timmer(wrapper2的内存地址) #index=wrapper1的内存地址 @auth(engine=‘file‘) #@xxx #index=xxx(最原始那个index的内存地址) #index=wrapper2的内存地址 def index(): print(‘welcome to index page‘) time.sleep(2) index() #wrapper1的内存地址()
标签:time 一个 ret %s code wrapper 加载顺序 基于 对象
原文地址:https://www.cnblogs.com/ye-hui/p/9751618.html