python装饰器

当我们要扩展一个函数的功能,却不想修改原函数的时候,可以用装饰器,比如:

有函数function1:

1 def function1(val):
2     val += 1
3     return val

当我们想输出这个函数的执行时间时,通常可以考虑修改原函数:

1 from time import time
2 
3 
4 def function1(val):
5     start = time()
6     val += 1
7     end = time()
8     print("time cost {0}".format(end - start))

但是有时候我们不能修改原函数的代码,比如该函数为内置函数,或者第三方的,而且及时可以修改如果每个函数都需要该功能,就得修改所有的函数,很麻烦,此时,可以用python的装饰器功能,先建立一个需要扩展功能的装饰器:

 1 from time import time
 2 
 3 
 4 def deco(f):
 5     def inner(*args,**kwargs):
 6         start = time()        #需要扩展的功能
 7         f(*args,**kwargs)    #执行被装饰的函数
 8         end = time()          #需要扩展的功能
 9         print("time cost {0}".format(end - start)
10     return inner

然后在需要被扩展的函数上加上@deco即可扩展原函数的功能。

1 @deco
2 def function1(val):
3     val += 1
4     return val

 

posted on 2019-02-16 22:30  情怀当饭吃  阅读(90)  评论(0编辑  收藏  举报

导航