python裝飾器1

簡單介紹裝飾器(注意格式)

高階函數:至少滿足下面兩個條件中的一個
1:接受一個或多個函數為參數
2:輸出一個函數
柯里化:將原來接受兩個參數的函數變成新的接受一個參數的函數的過程。新的函數返回一個以原來第二個參數為參數的函數。z=f(x,y)—>z=f(x)(y)

裝飾器(無參)
1:是一個函數
2:函數作為它的形參
3:返回值也是一個函數
4:可以使用@functionname方式調用
裝飾器是對傳入函數的功能的裝飾(功能增強)

裝飾器的基本形式:
def logger(fn):
def wrapper(*args,**kwargs):
ret=fn(*args,**kwargs)
return ret
return warp
@logger
def add(x,y):
return x+y
logger函數為裝飾器函數,對add函數進行功能性的增強。
@functionname下緊跟著的為被裝飾的函數。

裝飾器會替換掉原函數對象的屬性,需要使用一個functools模塊進行保護。
用上面的例子
from functools import wraps

def logger(fn):
@wraps(fn)
def wrapper(*args,**kwargs):
ret=fn(*args,**kwargs)
return ret
return warpper
@logger
def add(x,y):
return x+y

帶參裝飾器:
1:是一個函數
2:函數作為它的形參
3:返回值是一個不帶參的裝飾器函數
4:使用@functionname(參數列表)方式調用
5:可以看做在裝飾器外層又加了一層函數

from functools import wraps

def logger(f):
def _logger(fn):
@wraps(fn)
def wrapper(*args,**kwargs):
ret=fn(*args,**kwargs)
return ret
return warpper
return _logger
@logger
def add(x,y):
return x+y
裝飾器的用途:
裝飾器是AOP(Aspect Orientend Programming)面向切面編程的思想體現。
面向對象往往需要通過繼承或者組合依賴等方式調用一些功能,這些功能的代碼往往可能在多個類中出現,例如logger,這樣造成代碼的重復,增加了耦合。logger的改變影響所有使用它的類或方法。而AOP在需要的類或方法上切下,前后的切入點可以加入增強的功能。讓調用者和被調用者解耦。這是一種不修改原來的業務代碼,給程序動態添加功能的技術。例如logger函數功能就是對業務函數增加日志的,而業務函數中應該把與業務無關的日志功能剝離干凈。
裝飾器的應用場景:
日志、監控、權限、設計、參數檢查、路由等處理。
這些功能與業務功能無關,很多業務都需的公共功能,適合獨立出來,需要時對目標對象增強。

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88007

(0)
10590628461059062846
上一篇 2017-10-22 19:51
下一篇 2017-10-23 08:54

相關推薦

  • bash腳本基礎

    一,概述 shell腳本 程序:指令+數據 程序編程風格: 過程式:以指令為中心,數據服務于指令 對象式:以數據為中心,指令服務于數據 shell程序:提供了編程能力,解釋執行 編程邏輯處理方式: 順序執行 循環執行 選擇執行 shell編程:過程式、解釋執行 編程語言的基本結構: 數據存儲:變量、數組 表達式: a + b 語句:if shell腳本是包含…

    Linux干貨 2016-08-19
  • linux基礎學習第十一天(shell循環、軟件包管理)

    2016-08-16 授課內容: shell腳本基礎:循環,for,while,until(未講完) 軟件包管理(未講完): ?軟件運行環境 ?軟件包基礎 ?Rpm包管理 循環執行 將某代碼段重復運行多次 重復運行多少次: 循環次數事先已知 循環次數事先未知 有進入條件和退出條件 循環控制語句: break:【提結束循環,循環將不再執行】指前面的循環退出,退…

    Linux干貨 2016-08-18
  • 構建NP和NMP

    實驗一、構建NP (一)實驗布置:兩臺虛擬機充當代理服務器和后端服務器,一臺虛擬機充當客戶端。 (二)實驗目的:實現NP的搭建。 (三)實驗圖解: (四)實驗步驟: 1、  在后端服務器安裝php-fpm文件,修改PHP-FPM的配置文件,vim/etc/php-fpm.d/www.conf文件,如下: listen = 127.0.0.1:900…

    2017-05-07
  • 正則表達式的概念和用法

    概念 正則表達式是對字符串操作的一種邏輯表達方式,很多情況下我們需要在茫眾多的文件中找到我們需要的文件時,就需要用到正則表達式了 正則表達式就如同一個過濾器,能夠篩選出希望得到的字符串。它可以檢索、替換符合我們自己規定格式的所有文本。 正則表達式分兩類: 基本正則表達式 擴展正則表達式 正則表達式的用法和選項 在Linux中,正則表達式通常會配合文本過濾工具…

    2017-06-10
  • 第七周作業

    1、簡述linux操作系統啟動流程 CentOS 啟動流程圖: 通電自檢 power on system test(POST)–> BIOS –> 主機加電以后會將各個部件運轉起來,然后通過COMS上的軟件程序BIOS(Basic Input Output System)檢測每個設備cpu、內存、硬盤進行故障檢查并進行硬件…

    2018-02-07
  • Linux系統vim文本編輯器

                                                      &nbsp…

    Linux干貨 2016-08-15
欧美性久久久久