函数闭包基本实现
#装饰器的架子
#@语法糖 用法 @timmer 就相当于 test =timmer(test)
# 使用时在要修改函数前加:@+装饰器函数名
'''
#基本写法
def timmer(func):
def wrapper():
print(func)
func()
return wrapper
import time
def timmer(func):#func=test
def wrapper():
start_time = time.time()
func()#运作test()
stop_time = time.time()
print('yxsj%s'%(stop_time-start_time))
return wrapper
@timmer # test =timmer(test)
def test():
time.sleep(2)
print("test wan")
# res=timmer(test) #返回的是wrapper的地址 return的是wrapper
# res()#执行的是wrapper()
# test=timmer(test) #返回的是wrapper的地址 return的是wrapper
# test()#执行的是wrapper()
test()
#函数闭包加上返回值
import time
def timmer(func):#func=test
def wrapper():
start_time = time.time()
res=func()#赋值给res
stop_time = time.time()
print('yxsj%s'%(stop_time-start_time))
return res
return wrapper
@timmer # test =timmer(test)
def test():
time.sleep(2)
print("test wan")
return 'jieguo'
res=test()
print(res)
'''
#函数闭包加上参数
'''
import time
def timmer(func):#func=test
def wrapper(name,age):
start_time = time.time()
res=func(name,age)#赋值给res
stop_time = time.time()
print('yxsj%s'%(stop_time-start_time))
return res
return wrapper
@timmer # test =timmer(test)
def test(name,age):
time.sleep(2)
print("test wan, 名字【%s】 年龄【%s】" %(name,age))
return 'jieguo'
res=test('susu',29)
print(res)
'''
import time
def timmer(func):#func=test
#注意事项,一般函数参数是可变的,在写装饰器函数时用(args,kwargs)
def wrapper(*args,**kwargs):
start_time = time.time()
res=func(*args,**kwargs)#赋值给res
stop_time = time.time()
print('yxsj%s'%(stop_time-start_time))
return res
return wrapper
@timmer # test =timmer(test)
def test(name,age,):
time.sleep(2)
print("test wan, 名字【%s】 年龄【%s】 " %(name,age))
return 'jieguo'
res=test('susu',29,)
print(res)
@timmer # test =timmer(test)
def test1(name,age,yyy):
time.sleep(2)
print("test wan, 名字【%s】 年龄【%s】 kk【%s】" %(name,age,yyy))
return 'jieguo'
res=test1('susu',29,99)
print(res)