首页 > 其他 > 详细

装饰器

时间:2017-05-28 21:29:28      阅读:328      评论:0      收藏:0      [点我收藏+]
无参装饰器的简单实现
‘‘‘
装饰器:修饰别人的工具 修饰 添加功能 工具指的是函数
装饰器本身是任何可调用对象,被修饰的对象也可以是任何可调用对象
为什么要用装饰器
开放封闭原则
对修改是封闭的 对扩展是开放的
装饰器就是为了不修改被修饰对象的源代码以及调用方式的前提下,为其增加新功能

‘‘‘

# 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‘:

#装饰器  修饰的是自己自己正下方的对象
#添加多个装饰器的话 装饰器的顺序 影响
 

装饰器

原文:http://www.cnblogs.com/lazyball/p/6916640.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!