Python之裝飾器

參考網址
  > http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html
  > http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html

簡述

- 裝飾器的特點就是對已有的對象添加額外功能,且不修改對象內部代碼
- 使用裝飾器語法糖(@XXXXX)裝飾后,相當于嵌套閉合函數語法糖指向的函數也就是一個高階函數,
   被裝飾函數就是傳入的函數實參

一:不帶參數

  #!/usr/bin/python
  # -*- coding:utf-8 -*-

# 16 Oct. 2015
# Author:  Huang Junkai

import time

def time_calu1(func):
 def _extra():
     start = time.clock()
     func()
     end = time.clock()
     print 'total time:', end - start
 return _extra

 def time_calu2(func):
 start = time.clock()
 func()
 end = time.clock()
 print 'total time:', end - start
 return func

 @time_calu2
 def func():
 print 'Wow! Success'

 func()
 func()
看看兩個裝飾器time_calu1與time_calu2的區別:
前者是一次性的,只對第一個func()有效,即28~19行代碼等效于func = time_calu1(func); func() 
而后者可保證對每次調用的func(),都有效

二:帶參數

代碼:
#!/usr/bin/python
-- coding:utf-8 --

 # 16 Oct. 2015
 # Author:  Huang Junkai
 
 import time

 def time_calu1(func):
     def _extra(a, b):
         start = time.clock()
     result = func(a, b)
     end = time.clock()
     print 'used:', end - start
     return result
 return _extra


 def time_calu2(func):
 start = time.clock()
 func()
 end = time.clock()
 print 'used:', end - start
 return func



 @time_calu1
 def foo(a, b):
 # print 'Wow! Success: the result is %s' % (a + b)
 return a + b

 result = foo(1, 2)
 print result
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Python之裝飾器 裝飾器本質上是一個Python函數,它可以讓其他函數在不需要做任何代碼變動的前提下增加額外功...
    ikaroskun閱讀 362評論 0 0
  • 1.認識裝飾器 在python中,對于一個函數,若想在其運行前后做點什么,那么裝飾器是再好不過的選擇,話不多說,上...
    howie6879閱讀 1,419評論 4 20
  • 裝飾器的作用: 裝飾模式有很多經典的使用場景,例如插入日志、性能測試、事務處理等等,有了裝飾器,就可以提取大量函數...
    冰西瓜大郎閱讀 228評論 0 0
  • 馮唐易老,李廣難封。屈賈誼于長沙,非無圣主。竄梁鴻于海曲,豈乏明時?所賴君子見機,達人知命。老當益壯,寧移白首之心...
    蜜蜜的貓薄荷閱讀 739評論 0 0
  • 在投資中,我們會不知不覺犯很多錯誤,每個錯誤都意味著不小的虧損。書生也犯過不少錯誤,我希望多寫點這些錯誤,以警醒各...
    布衣書生走天下閱讀 299評論 0 0