叠加多个装饰器——day13

叠加多个装饰器

1.加载顺序(outter函数的调用顺序):自上而下
2.执行顺序(wrapper函数的执行顺序)import time

def outter(func):
def wrapper(*args,**kwargs):
start=time.time()
res=func(*args,**kwargs)
stop=time.time()
print(stop-start)
return res
return wrapper


from functools import wraps—————调用内置功能 wraps

def outter(func):
@wraps(func)———————————把index所有的信息都付给wrapper 使wrapper更加的像index
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
return res
# wrapper.__name__ = func.__name__
# wrapper.__doc__ = func.__doc__
return wrapper


@outter #index=outter(index) #index=wrapper
def index():
"""
这是index函数....
:return:
"""
print('from index')


print(index.__name__) #print(wrapper.__name__)
print(index.__doc__)

 

——————叠加多个装饰器的具体执行和加载顺序————————
'''
def outter1(func1): #func1=wrapper2的内存地址
print('加载了outter1')
def wrapper1(*args,**kwargs):
print('执行了wrapper1')
res1=func1(*args,**kwargs)
return res1
return wrapper1

def outter2(func2): #func2=wrapper3的内存地址
print('加载了outter2')
def wrapper2(*args,**kwargs):
print('执行了wrapper2')
res2=func2(*args,**kwargs)
return res2
return wrapper2

def outter3(func3): # func3=最原始的那个index的内存地址
print('加载了outter3')
def wrapper3(*args,**kwargs):
print('执行了wrapper3')
res3=func3(*args,**kwargs)
return res3
return wrapper3

 

@outter1 # outter1(wrapper2的内存地址)======>index=wrapper1的内存地址
@outter2 # outter2(wrapper3的内存地址)======>wrapper2的内存地址
@outter3 # outter3(最原始的那个index的内存地址)===>wrapper3的内存地址
def index():
print('from index')

print('======================================================')
index()

'''


import time

current_user={'user':None}

def auth(engine='file'):
def outter(func):
def wrapper(*args,**kwargs):
if current_user['user'] is not None:
res=func(*args,**kwargs)
return res

user=input('username>>>: ').strip()
pwd=input('password>>>: ').strip()

if engine == 'file':
# 基于文件的认证
if user == 'egon' and pwd == '123':
print('login successfull')
current_user['user']=user
res=func(*args,**kwargs)
return res
else:
print('user or password error')
elif engine == 'mysql':
# 基于mysql的认证
print('基于mysql的认证')
elif engine == 'ldap':
# 基于ldap的认证
print('基于ldap的认证')
else:
print('不知道engine')
return wrapper
return outter
——以默认值得形式付给@****后面的函数
@auth('ldap') ——必须加变量,作用就是给auth赋值,可以再函数内找到dap从而执行相应的语句
#@outter #index=outter(index) # index=wrapper
def index():
time.sleep(1)
print('from index')

@auth('mysql') #@outter # home=outter(home) #home=wrapper
def home(name):
print('welcome %s' %name)

index()
home('egon')

 

posted @ 2018-11-30 15:56  WenChen-0o0  阅读(109)  评论(0编辑  收藏  举报