首页 > 代码库 > 装饰器
装饰器
无参装饰器的简单实现
‘‘‘
装饰器:修饰别人的工具 修饰 添加功能 工具指的是函数
装饰器本身是任何可调用对象,被修饰的对象也可以是任何可调用对象
为什么要用装饰器
开放封闭原则
对修改是封闭的 对扩展是开放的
装饰器就是为了不修改被修饰对象的源代码以及调用方式的前提下,为其增加新功能
‘‘‘
# import time
#
# def timmer(func):
# def wrappper():
# start_time = time.time()
# func()
# stop_time = time.time()
# print(‘run time is %s‘ %(stop_time-start_time))
# return wrappper
#
# @timmer
# def index():
# time.sleep(3)
# print(‘welcome to beijing‘)
# index()
#这个@timmer 就会让index作为参数带入timmer,那么func就是index了
装饰器的流程分析及修订
#debug分析一下
# import time
#
# def timmer(func):
# def wrappper():
# start_time = time.time()
# func()
# stop_time = time.time()
# print(‘run time is %s‘ %(stop_time-start_time))
# return wrappper
#
# @timmer
# def index():
# time.sleep(3)
# print(‘welcome to beijing‘)
# index()
#修订
import time
def timmer(func):
def wrappper(*args,**kwargs): #这样的话就可以接受任何值了,既可以修饰无参也可以修饰有参
start_time = time.time()
func(*args,**kwargs)#
stop_time = time.time()
print(‘run time is %s‘ %(stop_time-start_time))
return wrappper
#
@timmer
def index():
time.sleep(3)
print(‘welcome to beijing‘)
return 1
res = index()
print(res)
#
@timmer
def foo(name):
print(‘from foo‘)
foo(‘alex‘)
##########有参装饰器#####################
#使用装饰器的时候,添加参数
import time
def timmer(func):
def wrappper(*args,**kwargs):
start_time = time.time()
func(*args,**kwargs)#
stop_time = time.time()
print(‘run time is %s‘ %(stop_time-start_time))
return wrappper
#
login_user = {‘name‘:None,‘status‘:False}
def auth(driver=‘file‘):
def auth2(func):
def wrapper(*args,**kwargs):
if driver==‘file‘:
if login_user[‘name‘] and login_user[‘status‘]:
res = func(*args, **kwargs)
return res
else:
name = input(‘name>>:‘)
pwd = input(‘pwd>>>:‘)
if name == ‘alex‘ and pwd == ‘123‘:
login_user[‘name‘]= ‘alex‘
login_user[‘status‘] = True
res=func(*args,**kwargs)
return res
else:
print(‘wrong login‘)
elif driver==‘ldap‘:
print(‘from ldap‘)
elif driver == ‘db‘:
#装饰器 修饰的是自己自己正下方的对象
#添加多个装饰器的话 装饰器的顺序 影响
装饰器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。