13.python装饰器进阶之原理
2019-01-14 本文已影响1人
花间派I风月
转载 http://www.cnblogs.com/Eva-J/articles/7194277.html#_label6
一、楔子
- 作为一个会写函数的python开发,我们从今天开始要去公司上班了。写了一个函数,就交给其他开发用了。
def func1():
print('in func1')
- 季度末,公司的领导要给大家发绩效奖金了,就提议对这段日子所有人开发的成果进行审核,审核的标准是什么呢?就是统计每个函数的执行时间。
这个时候你要怎么做呀? - 你一想,这好办,把函数一改:
import time
def func1():
start = time.time()
print('in func1')
print(time.time() - start)
func1()
- 来公司半年,写了2000+函数,挨个改一遍,1个礼拜过去了,等领导审核完,再挨个给删了。。。又1个礼拜过去了。。。这是不是很闹心?
- 你觉得不行,不能让自己费劲儿,告诉所有开发,现在你们都在自己原本的代码上加上一句计算时间的语句?
import time
def func1():
print('in func1')
start = time.time()
func1()
print(time.time() - start)
- 还是不行,因为这样对于开发同事来讲实在是太麻烦了。
- 那怎么办呢?你灵机一动,写了一个timer函数。。。
import time
def timer(func):
start = time.time()
func()
print(time.time() - start)
def func1():
print('in func1')
def func2():
print('in func2')
timer(func1)
timer(func2)
- 这样看起来是不是简单多啦?不管我们写了多少个函数都可以调用这个计时函数来计算函数的执行时间了。尽管现在修改成本已经变得很小很小了,但是对于同事来说还是改变了这个函数的调用方式,假如某同事因为相信你,在他的代码里用你的方法用了2w多次,那他修改完代码你们友谊的小船也就彻底地翻了。
- 你要做的就是,让你的同事依然调用func1,但是能实现调用timer方法的效果。