Python——初识装饰器
在实际应用中,对源代码修改封闭,对扩展开放,所以我们不能在函数内部直接添加时间模块,进而求出运行时间。只能在外部进行扩展。但是我们调用函数时,不能修改调用函数的方式。因此我们采用装饰器的方式来进行调用。
具体代码看下图:
#首先定义时间的模块
import time
#写一个加法器函数
def add(a,b):
print(a+b)
#随便写一个函数
def foo():
print('hello')
time.sleep(2)
#写一个关于看某个函数所运行的时间函数
def show_time(f):
def inner():
first = time.time()
f()
end = time.time()
print('spend %s'%(end-first))
return inner
#当他人大量使用某个公共模块时,你不能修改调用的方法
foo = show_time(foo)
foo()
# hello
# spen 2.001201868057251
@show_time #与上面的foo = show_time(foo)相等,这就是一个装饰器
def text():
print('You are a student')
time.sleep(3)
text() #当执行这段代码时,直接去执行inner函数
#结果 You are a student
#所需的时间 spen 3.001455307006836
在上面的程序中,当我们执行程序时,例如 “ text() ” 这个时,其实已经先不执行原来的函数模块,这是因为在上面我们定义了@show_time,而这个帮我们所做的事情就是当执行业务逻辑text()时,帮我们从执行原来的函数块到执行inner()函数块