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

 

posted @ 2015-10-16 21:27  路则  阅读(181)  评论(0编辑  收藏  举报