装饰器
装饰器
一:什么是装饰器?
装饰器就是装饰函数的函数,为函数添加功能的容器
二:为什么要有装饰器?
代码开发遵循开放封闭原则,针对源码是封闭的,不建议修改,但是扩展是开放的,装饰器是在,不修改原来代码情况下,对功能进行扩展。
三:如何使用装饰器
# 无参数装饰器模板
def wrapper(func):
def inner(*args,**kwargs):
res = func(*args,**kwargs)
reunrn res
retun inner
示列
# 写一个程序运行,计算程序快慢
import time
def timer(func):
def wrapper(*args,**kwargs):
start_t = time.time()
res = func(*args,**kwargs)
end_t = time.time()
pritn("这个程序运行时间:{}".format(end_t-start_t))
return res
return wrapper
def foo():
print(1)
time.sleep(2)
foo=timer(foo)
foo()
@timer # bar = timer(bar)
def bar(a,b):
print(a,b)
return a,b
bar(1,3)
有参数装饰器
def outer(type_):
def wrapper(func):
def inner(*args,**kwargs):
inp_name = input('请输入你的用户名:')
inp_pwd = input('请输入你的密码:')
if type_ == 'mysql': # 这段代码过段时间补充上去
pass
elif type_ == 'LDAP': # 这段代码过段时间补充上去
imp
pass
elif type_ == 'file':
with open(r'db.txt',encoding='utf-8',mode='rt') as f:
for line in f:
q_name, q_pwd = line.strip().split(':')
if q_name == inp_name and q_pwd == inp_pwd:
res = func(*args,**kwargs)
return res
else:
print("密码或者用户名错误!")
return inner
return wrapper