#装饰器,就是调用原来的函数,被赋予新的功能,且不改变原来的代码,保证
#代码的一致性。但是,功能变得强大了。
import time
def funList(func): #其实,也可以定义一个新函数,参数为原来函数也实现功能。
startTime=time.time()
func()
endTime=time.time()
msec=(endTime-startTime)
print("time is %d ms"%msec)
def user(name):#超级航母,根据解释器的名称赋予不同功能。
def decotest(func):
def wrap(*args,**kwargs):
if name=='jcy':
print("hello.jcy")
else:
print("你好!")
func(*args,**kwargs)
return wrap
return decotest
def deco(func):#带参数的装饰器,且参数可以不定。
def test(*args,**kwargs):
startTime=time.time()
print("deco")
func(*args,**kwargs)
endTime=time.time()
msec=(endTime-startTime)
print("time is %d ms"%msec)
return test
def deconew(func):
def test(*args,**kwargs):
startTime=time.time()
print("deconew")
func(*args,**kwargs)
endTime=time.time()
msec=(endTime-startTime)
print("you very good!time is %d ms"%msec)
return test
#--------------------------------------------
@deco #语法糖
@deconew
@user(name='jcy')
def func1(a,b):
print("hello,func1")
time.sleep(2)
print("world %s"%(a+b))
@deco
@deconew
@user(name='other')
def func2(a,b,c):
print("hello,func2")
time.sleep(2)
print("my god!%s"%(a+b+c))
#func()
if __name__=='__main__':
# ss=[func1,func2]
# for y in ss:
# funList(y)
f=func1
f(3,4)
f=func2
f(4,5,6)