在不修改一个功能内源代码以及调用方式的前提下,为其添加新功能.
装饰器满足: 1.不修改被装饰函数内的代码 2.不修改被装饰函数的调用方式(例如 func() 调用) 3.满足前两点的前提下,为函数增添功能
示例
此函数计算了800的50000次幂
def func01():
num = 800**50000
return num
print(func01())
他的调用方式是func01() ,现在需要在不改变调用方式与其内部代码的情况下知道其计算使用的时间是多久.
import time
def timmer(f):
def func():
start = time.time()
f()
end = time.time()
print(end - start)
return func
@timmer
def func01():
num = 800**50000
return num
print(func01())
但是现在的问题是运行时间得到了结果,但是print(func01())打印的是空置而不是800的50000次幂. 因为此时运行func01()调用的实际是func(),而func()没有返回值,我们在func()中把f()的返回值接收一下并设置为func()的返回值就可以了.
import time
def timmer(f):
def func():
start = time.time()
ff = f()
end = time.time()
print(end - start)
return ff
return func
@timmer
def func01():
num = 800**50000
return num
print(func01())
如果被装饰的函数需要传入参数
import time
def timmer(f):
def func(str01):
start = time.time()
ff = f(str01)
end = time.time()
print(end - start)
return ff
return func
@timmer
def func01(str01):
num = 800**50000
return str(num) + str01
print(func01('尾巴'))
|