def log(func):
def my_time(a,b):
def wrapper(*args):
print(time.asctime())
s_time = time.time()
temp = func(a,b)
e_time = time.time()
print(e_time-s_time)
return 'OK'
return wrapper()
return my_time
@log
def f(x,y):
print("执行程序")
time.sleep(1)
print(x+y)
n = f(1,2)
print(n)
def my_time(func):
def wrapper():
s_time = time.time()
func()
e_time = time.time()
print(e_time-s_time)
return wrapper
#运行的时候的是脱衣服,先脱外层,再脱内层
#@log #先装饰,日至 外层衣服
@my_time #后装饰,性能 内层衣服
def f():
print('i am f')
time.sleep(3)
f()
运行结果:
i am f
3.0001718997955322
#闭包:内层函数访问外层函数的变量
#装饰器:本质是个函数
#作用:用来装饰其他函数,给其他的函数附加新的功能
#原则:1、不能修改被装饰的函数的源代码
# 2、不能改变被装饰函数的调用方式
#应用场景:插入日至,性能测试,处理事务
#例:测试函数的运行时间
import time
def f():
print('i am f')
time.sleep(2)
def new_f():
s_time = time.time() #开始时间
f()
e_time = time.time() #结束时间
print('耗时:{}'.format(e_time-s_time))
new_f()