1 import time 2 def foo(): 3 time.sleep(1) 4 print("foo.....")
假设,这是一个在生产中正在使用的函数
公司老板让小明来实现一个功能,要求是给这个函数加上时间统计功能
小明马上就想到了解决的方法,并付诸行动。
小明的解决方案
小明想,这还不简单?马上给出了下面的代码
1 def foo(): 2 start_time = time.time() 3 time.sleep(1) 4 print("foo.....") 5 end_time = time.time() 6 print("time:{}".format(end_time-start_time))
当小明修改完,问题出现了,很多部门都会使用这个函数,小明的修改导致了很多部门出现了问题
或者,小明的代码出现了bug,导致了整个公司的瘫痪
小明被开除
他的同事小刚被任命做小明没做完的事情
小刚的解决方案
小刚想,既然不能修改原函数,那也好办,我再建一个新的函数调用原函数不就完了?
1 def count_time(x): 2 start_time = time.time() 3 x() 4 end_time = time.time() 5 print("time:{}".format(end_time - start_time)) 6 7 8 count_time(foo)
功能是实现了,但是整个公司调用foo函数的人都要跟着要把调用方式改了
小刚被群情激奋的公司员工一顿胖揍
老板也对小刚的方案不满意,小刚被扣5000块工资
小芳被任命接替这份工作
小芳的解决方案
1 def count_time1(x): 2 def inner(): 3 start_time = time.time() 4 x() 5 end_time = time.time() 6 print("time:{}".format(end_time - start_time)) 7 return inner 8 9 10 foo = count_time1(foo) 11 foo()
小芳成功完成任务,老板感觉还可以,奖励了小芳2000元
但是老板认为这个代码还有改进的空间,便让小芳进行改进
python中的装饰器
1 import time 2 def count_time(x): 3 def inner(): 4 start_time = time.time() 5 x() 6 end_time = time.time() 7 print("time:{}".format(end_time - start_time)) 8 return inner 9 10 11 @count_time 12 def foo(): 13 time.sleep(1) 14 print("foo.....") 15 16 17 foo()
文章中如果有什么错误,请评论指正,谢谢!