装饰器就是使用@+函数名来创建的,一般来说是用来拓展某些函数的功能而不改变其原来的语法
装饰器指的定义一个函数,该函数是用来为其他函数添加额外的功能
就是拓展原来函数功能的一种函数
装饰器就是在不修改被装饰器对象源代码以及调用方式的前提下为被装饰对象添加新功能
import time
def calc_time(fn):
print('i am calc !')
def inner():
start = time.time()
fn() #这里是调用被装饰的函数
end=time.time()
print('总共耗时{}秒'.format(end-start))
return inner #这里不是inner()
@calc_time #这就是开始装饰了
def run():
x=0;
for i in range (1,10000000):
x+=i
print(x)
print("装饰后为{}".format(run)) #这里的run函数变成了inner函数
# run()
calc_time(run()) #这样使用要run加上()
当然这里的函数也可以添加参数,缺省参数等
import time
def calc_time(fn):
print('i am calc !')
def inner(m):
start = time.time()
fn(m) #这里是调用被装饰的函数
end=time.time()
print('总共耗时{}秒'.format(end-start))
return inner #这里不是inner()
@calc_time #这就是开始装饰了
def run(m):
x=0;
for i in range (1,m):
x+=i
print(x)
print("装饰后为{}".format(run)) #这里的run函数变成了inner函数
# run()
calc_time(run(10000000)) #这样使用要run加上()