裝飾器理解

一.理論

  *裝飾器實際上就是一個函數函數

  *有兩個特別之處io

    1.參數是一個函數import

    2.返回值是一個函數im

 

二.示例

  def my(func): #參數是一個函數裝飾器

    def w():tools

      print("hello,world") #在裝飾函數以前輸出這句話data

      func() #裝飾器修飾的函數的輸出return

      return w #返回一個函數  ps

    @my參數

    def run():

      print("run")

      run()

 

等價於 run=my(run)=w

 

三.兩個注意的點

  1.裝飾器中定義的函數,要使用*args,**kwargs兩隊兄弟的組合.而且在這個函數中執行的時候也要把*args,**kwargs傳進去.

  2.須要使用functools.wraps在裝飾器中的函數上把傳進來的這個函數進行一個包裹,這樣就不會丟失原來的函數的__name__等屬性.

  from functools import wraps

  def my(func):

    @wraps(func)

    def w(*args,**kwargs):

      print("hello,world")

      func(*args,**kwargs)

    return w

相關文章
相關標籤/搜索