Python--装饰器
参考网址:
http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html
http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html
1:对已有的对象添加额外功能,且不修改对象内部代码
2:python语法糖的使用
一:不带参数
1 #!/usr/bin/python 2 # -*- coding:utf-8 -*- 3 4 # 16 Oct. 2015 5 # Author: Huang Junkai 6 7 import time 8 9 def time_calu1(func): 10 def _extra(): 11 start = time.clock() 12 func() 13 end = time.clock() 14 print 'total time:', end - start 15 return _extra 16 17 def time_calu2(func): 18 start = time.clock() 19 func() 20 end = time.clock() 21 print 'total time:', end - start 22 return func 23 24 @time_calu2 25 def func(): 26 print 'Wow! Success' 27 28 func() 29 func()
time_calu1与time_calu2的区别:
前者是一次性的,只对第一个func()有效,即28~19行代码等效于‘ func = time_calu1(func); func() ’
后者可保证对每次调用的func(),都有效
二:带参数
1 #!/usr/bin/python 2 # -*- coding:utf-8 -*- 3 4 # 16 Oct. 2015 5 # Author: Huang Junkai 6 7 import time 8 9 10 def time_calu1(func): 11 def _extra(a, b): 12 start = time.clock() 13 result = func(a, b) 14 end = time.clock() 15 print 'used:', end - start 16 return result 17 return _extra 18 19 20 def time_calu2(func): 21 start = time.clock() 22 func() 23 end = time.clock() 24 print 'used:', end - start 25 return func 26 27 28 @time_calu1 29 def foo(a, b): 30 # print 'Wow! Success: the result is %s' % (a + b) 31 return a + b 32 33 result = foo(1, 2) 34 print result