python全棧脫產第11天

來源:互聯網
上載者:User

標籤:解譯器   out   開放封閉原則   pre   修改   就是   函數名   pytho   turn   

裝飾器

  定義:器是指具備某一功能的工具,裝飾指的是為被裝飾器對象添加新功能,所以裝飾器就是為被裝飾對象添加新功能的工具

    注意:裝飾器本身可以是任意可調用的對象,被裝飾器的對象也可以是任意可調用對象

  用處:開放封閉原則:封閉指的是對修改封閉,對擴充開放

  遵循兩大原則:1.不修改被裝飾對象的原始碼

         2.不修改被裝飾對象的調用方式

  目標:在遵循兩大原則的前提下為被裝飾對象添加上新功能

  用法:

  def foo(func):

    def wrapper(*args,**kwargs):

      res=func(*args,**kwargs)

    return res

  return wrapper

  裝飾器的文法糖:在被裝飾對象正上方單獨一行寫@裝飾器的名字

        原理:python解譯器一旦運行到@裝飾器的名字,就會調用裝飾器,然後將被裝飾函數的地址當做參數傳給裝飾器,最後將裝飾器啟動並執行結果賦值給原函數名

  

  def foo(func):

    def wrapper(*args,**kwargs):

      res=func(*args,**kwargs)

    return res

  return wrapper

  @foo()

  def index():

    print(xxx)

  index()

  疊加多個裝飾:解釋@文法的時候是自下而上,執行裝飾器內的函數是自上而下

  有參裝飾器:需要在裝飾器外面再套一個函數用於傳參  

def outter1(x,y,z):
def outter2(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
return res
return wrapper
return outter2  
  wraps裝飾器:匯入wraps模組,應加在裝飾器最內層的函數上,@wraps(func),用於將裝飾器內函數偽裝成和被裝飾對象一樣

python全棧脫產第11天

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.