什麼時候會用到python裝飾器?

來源:互聯網
上載者:User

回複內容:

這有一份Python官方的裝飾器執行個體列表,你可以在裡邊看到裝飾器的各種妙用:PythonDecoratorLibrary ,基本上你差不多能想到的都有了。

差不多有這麼幾類:
1. 注入參數(提供預設參數,產生參數)
2. 記錄函數行為(日誌、緩衝、計時什麼的)
3. 預先處理/後處理(配置上下文什麼的)
4. 修改調用時的上下文(線程非同步或者並行,類方法)

裝飾器其實也就是一個函數,一個用來封裝函數的函數,返回一個修改之後的函數對象。經常被用於有切面需求的情境,較為經典的有插入日誌、效能測試、交易處理等。裝飾器是解決這類問題的絕佳設計,有了裝飾器,我們就可以抽離出大量函數中與函數功能本身無關的雷同代碼並繼續重用。概括的講,裝飾器的作用就是為已經存在的對象添加額外的功能。


首先來看看一個小例子:

def alan():    print('alan speaking')
分享一篇我的筆記:Python裝飾器筆記 (知乎這裡排版我排的不好,有意仔細看的可以點前面的連結跳轉到簡書)
============

一.函數裝飾器
1.從Python內層函數說起

首先我們來探討一下這篇文章所講的內容Inner Functions - What Are They Good For?(中文版

使用內層函數的三個好處
  • 封裝
  • 貫徹DRY原則
  • 閉包和工廠函數

1.封裝

def outer(num1):    def inner_increment(num1):  # hidden from outer code        return num1 + 1    num2 = inner_increment(num1)    print(num1, num2)inner_increment(10) #不能正確運行# outer(10) #可以正常運行
再你想改變一個已有函數的功能的時候可以用。 可以添加功能在調用函數之前和之後,這樣就可以產生一個基於之前函數的新函數

例如:
def addOne(func):def wraper(*args,**kwargs):saySmthing = "Result :"return saySmthing +" "+ str(func(*args,**kwargs)) return wraper@addOnedef func(a,b):return a+b  print(func(10,20))
偷懶的時候。

裝飾器很容易在某個流程中注入一些代碼(類似aop),可以集中控制原有函數或者類的行為,可以方便的做全域單例,異常處理等。說其中一個吧
@classmethod
修飾類成員函數,修飾後類似C++的類全域函數,可以不執行個體化對象就可調用。
裝飾器是在Python 2.4中加入的,它使得函數和方法封裝(接收一個函數並返回增強版本的一個函數)更容易閱讀和理解。原始的使用情境是可以將方法在定義的首部將其定義為類的方法或靜態方法。
常見的裝飾器模式包括:
  • 參數檢查;
  • 緩衝;
  • 代理;
  • 上下文提供者。

Python進階編程 (豆瓣) P37-46
如果你不想看英文文檔的話,可以看看這本書。舉個實際的例子:PyQt中綁定事件和事件處理常式的時候
@QtCore.pyqtSlot()
def on_btnOpen_clicked(self):
pass
這樣就不用顯示的connect了看一下flask架構。裝飾器用的飛起。特別是請求路由。就像作戰裡的輔助軍一樣。正規軍幹活,輔助軍搞點邊角料工作。跟你程式邏輯相關部分的放在正規軍函數裡。而有些輔助邏輯跟主要邏輯無關,又具有很高的重複性,放在主要函數裡面會覺得不清晰。做成裝飾器,用起來美觀大方,符合python的美學。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.