版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xqt15538076006/article/details/82219349
需求如下
项目中定义了两个函数foo和bar 这是公共函数。现在需要在调取这两个函数的基础上 计算函数执行的时间。(原则不修改foo和bar函数)
演变一:
这种方式是直接在原函数的内部修改源代码 太过于简单 就不写了。这种方式缺点太多,涉及到直接修改函数源码了。方式不可取。
演变二
import time
def foo():
time.sleep(1)
print('foo......')
def bar():
time.sleep(1)
print('bar......')
def show_time(f):
start_time = time.time()
f()
end_time = time.time()
print('spend time %s'%(end_time - start_time))
show_time(bar)
结论 :如果想要调取foo 那就直接调取show_time(foo) 如果想要调取bar 直接show_time(bar) 即可。但是目前的缺陷是:本来是调取foo 现在变成调取show_time 改变了调取的方式。虽然实现了功能但是改变函数名是不可取的。
演变三
import time
def foo():
time.sleep(1)
print('foo......')
def bar():
time.sleep(1)
print('bar......')
def show_time(f):
def inner():
start_time = time.time()
f()
end_time = time.time()
print('spend time %s'%(end_time - start_time))
return inner
foo = show_time(foo)
bar = show_time(bar)
foo()
bar()
结论:功能基本上已经实现 但是这种写法 不好看,每一个函数都需要进行赋值。
演变四
import time
def show_time(f):
def inner():
start_time = time.time()
f()
end_time = time.time()
print('spend time %s'%(end_time - start_time))
return inner
@show_time # foo = show_time(foo)
def foo():
time.sleep(1)
print('foo......')
@show_time # bar = show_time(bar)
def bar():
time.sleep(1)
print('bar......')
foo()
bar()
结论:这就是最终的方式