Python

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()

文章中如果有什么错误,请评论指正,谢谢!

原文地址:https://www.cnblogs.com/changjiangwei/p/11368441.html