装饰器

无参装饰器的简单实现
'''
装饰器:修饰别人的工具 修饰 添加功能 工具指的是函数
装饰器本身是任何可调用对象,被修饰的对象也可以是任何可调用对象
为什么要用装饰器
开放封闭原则
对修改是封闭的 对扩展是开放的
装饰器就是为了不修改被修饰对象的源代码以及调用方式的前提下,为其增加新功能

'''

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

#装饰器  修饰的是自己自己正下方的对象
#添加多个装饰器的话 装饰器的顺序 影响
 
posted @ 2017-05-28 20:56  lazyball  阅读(207)  评论(0编辑  收藏  举报