标签:time() one port imm 源代码 tar login imp stop
无参装饰器的简单实现
‘‘‘
装饰器:修饰别人的工具 修饰 添加功能 工具指的是函数
装饰器本身是任何可调用对象,被修饰的对象也可以是任何可调用对象
为什么要用装饰器
开放封闭原则
对修改是封闭的 对扩展是开放的
装饰器就是为了不修改被修饰对象的源代码以及调用方式的前提下,为其增加新功能
‘‘‘
# 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‘:
#装饰器 修饰的是自己自己正下方的对象
#添加多个装饰器的话 装饰器的顺序 影响
标签:time() one port imm 源代码 tar login imp stop
原文地址:http://www.cnblogs.com/lazyball/p/6916640.html