码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器

时间:2017-05-28 21:36:11      阅读:269      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!