#!/usr/local/bin/python3
# -*- coding:utf-8 -*-
import time
'''
#--------------------level 1---------------------#初始
def decorator(func):
start_time=time.time()
func()
stop_time=time.time()
print('time:%s'%(stop_time-start_time))
def test1():
time.sleep(2)
print('in the test1')
def test2():
time.sleep(2)
print('in the test1')
decorator(test1)
decorator(test2)
#--------------------level 2---------------------#改进
def timmer(func): #timmer(test1) func=test1
def decorator():
start_time = time.time()
func()
stop_time = time.time()
print('time:%s' % (stop_time - start_time))
return decorator
def test1():
time.sleep(2)
print('in the test1')
def test2():
time.sleep(2)
print('in the test1')
test1=timmer(test1)
test1()
test2=timmer(test2)
test2()
#---------------------level 3----------------------#引入装饰器符号@
def timmer(func): #timmer(test1) func=test1
def decorator():
start_time = time.time()
func()
stop_time = time.time()
print('time:%s' % (stop_time - start_time))
return decorator
@timmer #相当于 test1=timmer(test1),这句代码执行完成后,test1已经变成了 decorator
def test1():
time.sleep(2)
print('in the test1')
@timmer
def test2():
time.sleep(2)
print('in the test1')
test1()
test2()
#--------------------level 4---------------------#新增功能:既可以传递参数,也可以不传递参数
def timmer(func): #timmer(test1) func=test1
def decorator(*args,**kwargs):
start_time = time.time()
func(*args,**kwargs)
stop_time = time.time()
print('time:%s' % (stop_time - start_time))
return decorator
@timmer #相当于 test1=timmer(test1),这句代码执行完成后,test1已经变成了 decorator
def test1():
time.sleep(2)
print('in the test1')
@timmer
def test2():
time.sleep(2)
print('in the test1')
@timmer
def test3(name):
print('name:',name)
test1()
test2()
test3("zhangyu")
#--------------------level 5---------------------#终极版(含参数的装饰器)
user = "zhangyu"
password = "332281"
def auth(auth_type):
print("auth func:",auth_type)
def out_wrapper(func):
def wrapper(*args, **kwargs):
print("wrapper:",*args,**kwargs)
if auth_type=="local":
user_name = input("name:-->")
passwd = input("passwd:-->")
if user_name == user and password == passwd:
print("user has passed")
res = func(*args, **kwargs)
print("---after---")
return res
else:
print("invalid input")
exit()
elif auth_type=="ldap":
print("nonono")
exit()
return wrapper # 注意:此处返回的应该是一个函数wrapper,而不是函数值wrapper()
return out_wrapper
def index():
print("welcome to index page")
@auth(auth_type="local") #home=auth(
def home(): #此处home相当于调用wrapper home=auth(home),return wrapper
print("welcome to home page")
return "from home"
@auth(auth_type="ldap")
def bbs():
print("welcome to bbs page")
index()
print(home())
bbs()
'''