Python 修饰器


描述:对于函数foo,使用修饰器修饰,在执行foo函数的同时统计执行时间。这样其他函数都可以使用此修饰器得到运行时间。

(有返回值和没有返回值的函数要用不同的修饰器似乎)

(对于有返回值的函数,不确定用result存储实际函数执行结果再最终返回的方法是不是恰当)

 1 import time
 2 
 3 def timeit(func):
 4 
 5     def wrapper(word):
 6         start = time.clock()
 7         result = func(word)
 8         end = time.clock()
 9         print 'Used: ', end - start
10         return result
11 
12     return wrapper
13 
14 @timeit
15 def foo(word):
16     return word
17 
18 
19 print foo("123")

 

 1 def transfer(func):
 2     def wrapper():
 3         result = func()
 4 
 5         result_new = {}
 6         for key in result:
 7             result_new[key] = result[key]
 8             if type(result_new[key]) is type("H"):
 9                 result_new[key] = result_new[key].upper()
10 
11         return result_new
12 
13     return wrapper
14 
15 @transfer
16 def foo():
17     result = {}
18     result['name'] = "wang"
19     result['age'] = 1
20 
21     return result
22 
23 print foo()

 在类里

 1 class test:
 2     def __init__(self):
 3         pass
 4 
 5     def transfer(func):
 6         def wrapper(instance):
 7             result = func(instance)
 8             result_new = {}
 9             for key in result:
10                 result_new[key] = result[key].upper()
11 
12             return result_new
13 
14         return wrapper
15 
16     @transfer
17     def getDict(self):
18         result = {}
19         result["name"] = "wang"
20         return result
21 
22 t = test()
23 print t.getDict()
24 class test:
25     def __init__(self):
26         pass
27 
28     def transfer(func):
29         def wrapper(instance):
30             result = func(instance)
31             result_new = {}
32             for key in result:
33                 result_new[key] = result[key].upper()
34 
35             return result_new
36 
37         return wrapper
38 
39     @transfer
40     def getDict(self):
41         result = {}
42         result["name"] = "wang"
43         return result
44 
45 t = test()
46 print t.getDict()

 

参考文章:

http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM