day18_01_有参装饰器






# import time


# def outter(func):
# # func=被装饰对象的内存地址
# #wrapper的参数取决于被装饰对象
#
# def wrapper(*args,**kwargs):
# start=time.time()
# func(*args,**kwargs)
# stop=time.time()
# print(stop-start)
# return wrapper



# @print # home=print(home)
# def home(a,b,c):
# pass
#
# print(home)

#一 知识储备

#由于语法糖 @ 的限制,outter函数只能有一个参数,
# 并且该参数只能是用来接收被装饰对象的内存地址


# def outter(func):
# def wrapper(*args,**kwargs):
# res=func(*args,**kwargs)
# return res
# return wrapper
#
# @outter #index=outter(index) index=>wrapper
# def index(x,y):
# print(x,y)

#偷梁换柱之后,
#indexs参数是什么样子,wrapper参数就是什么样子
#index的返回值是什么样子,wrapper返回值就是什么样子
#index的属性是什么样子,wrapper的属性就是什么样子==》from functools import wraps



#三炮玩法

# def auth(func,db_type):
# def wrapper(*args,**kwargs):
# name=input('your name:').strip()
# pwd=input('your password:').strip()
#
#
# if db_type == 'file':
# #假设从文件中取账号密码进行验证:
# if name == 'egon' and pwd == '123':
# print('基于文件的验证成功!')
# res=func(*args,**kwargs)
# return res
# else:
# print('user or pwd error!')
#
# elif db_type == 'mysql':
# print('基于MySQL验证!')
# elif db_type == 'ldap':
# print('基于ldap的验证!')
#
# else:
# print('不支持该db_type')
#
# return wrapper
#
#
# # @auth #账号密码来源于文件
# def index(x,y):
# print('index-->>%s:%s'%(x,y))
#
#
# # @auth #账号密码来源于数据库
# def home(name):
# print('index-->>%s'%name)
#
#
# # @auth #账号密码来源于ladp
# def transfer():
# print('transfer')
#
# index=auth(index,'file')
# # home=auth(home,'mysql')
# # transfer=auth(transfer,'ldap')
#
#
# index(1,2)
# # home('egon')
# # transfer()







# #三炮 二
def auth(db_type='file'):


def deco(func):
def wrapper(*args,**kwargs):
name=input('your name:').strip()
pwd=input('your password:').strip()


if db_type == 'file':
#假设从文件中取账号密码进行验证:
if name == 'egon' and pwd == '123':
print('基于文件的验证成功!')
res=func(*args,**kwargs)
return res
else:
print('user or pwd error!')

elif db_type == 'mysql':
print('基于MySQL验证!')
elif db_type == 'ldap':
print('基于ldap的验证!')

else:
print('不支持该db_type')

return wrapper
return deco

deco=auth(db_type='file')

@deco #账号密码来源于文件
def index(x,y):
print('index-->>%s:%s'%(x,y))

deco=auth(db_type='mysql')
@deco #账号密码来源于数据库
def home(name):
print('index-->>%s'%name)

deco=auth(db_type='ldap')
@deco #账号密码来源于ladp
def transfer():
print('transfer')



index(1,2)
home('egon')
transfer()




#语法糖
def auth(db_type='file'):

def deco(func):
def wrapper(*args,**kwargs):
name=input('your name:').strip()
pwd=input('your password:').strip()


if db_type == 'file':
#假设从文件中取账号密码进行验证:
if name == 'egon' and pwd == '123':
print('基于文件的验证成功!')
res=func(*args,**kwargs)
return res
else:
print('user or pwd error!')

elif db_type == 'mysql':
print('基于MySQL验证!')
elif db_type == 'ldap':
print('基于ldap的验证!')

else:
print('不支持该db_type')

return wrapper
return deco


@auth(db_type='file') # @deco #index=deco(index) #index=wrapper
def index(x,y):
print('index-->>%s:%s'%(x,y))


@auth(db_type='mysql') #账号密码来源于数据库
def home(name):
print('index-->>%s'%name)


@auth(db_type='ldap') #账号密码来源于ladp
def transfer():
print('transfer')



index(1,2)
home('egon')
transfer()




#有参装饰器模板

def auth(x,y,z):
def outter(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
return res
return wrapper
return outter

@auth(1,y=2,z=3)
def index():
pass









posted @ 2021-01-06 09:04  欢乐二次方  阅读(74)  评论(0)    收藏  举报