天天看點

裝飾器引入 | Python從入門到精通:高階篇之十七

檢視上一節:閉包函數

裝飾器引入

# 建立幾個函數

def add(a , b):
    '''
        求任意兩個數的和
    '''
    r = a + b
    return r


def mul(a , b):
    '''
        求任意兩個數的積
    '''
    r = a * b
    return r    

# 希望函數可以在計算前,列印開始計算,計算結束後列印計算完畢
# 我們可以直接通過修改函數中的代碼來完成這個需求,但是會産生以下一些問題
#   ① 如果要修改的函數過多,修改起來會比較麻煩
#   ② 并且不友善後期的維護
#   ③ 并且這樣做會違反開閉原則(OCP)
# OCP:程式的設計,要求開放對程式的擴充,要關閉對程式的修改

r = add(123,456)
print(r)           

我們希望在不修改原函數的情況下,來對函數進行擴充。隻需要根據現有的函數,來建立一個新的函數

def fn():
    print('我是fn函數....')

def fn2():
    print('函數開始執行~~~')
    fn()
    print('函數執行結束~~~')

fn2()               

執行結果為:

裝飾器引入 | Python從入門到精通:高階篇之十七

此時就達到了對fn函數的一個擴充。

對第一個加法示例進行擴充:

def new_add(a,b):
    print('計算開始~~~')
    r = add(a,b)
    print('計算結束~~~')
    return r

r = new_add(111,222)    
print(r)           
裝飾器引入 | Python從入門到精通:高階篇之十七

上邊的方式,已經可以在不修改源代碼的情況下對函數進行擴充了。

但是,這種方式要求我們每擴充一個函數就要手動建立一個新的函數,實在是太麻煩了。

為了解決這個問題,我們建立一個函數,讓這個函數可以自動的幫助我們生産函數。

點選檢視配套視訊教程

更多内容請訂閱

python學習站

官方技術圈!