1. 程式人生 > >裝飾器函數

裝飾器函數

col span def lag mil outer 裝飾 rgs ret

裝飾器的本質:一個閉包函數

裝飾器的功能:在不修改原函數及其調用方式的情況下對原函數功能進行擴展

裝飾器滿足開放封閉原則:

  1,對擴展是開放的

  2,對修改是封閉的

裝飾器的主要功能:

在不改變函數調用方式的基礎上在函數的前、後添加功能。

裝飾器的固定格式:

def timmer(func):
    def inner(*args,**kwargs):
        ‘‘‘添加函數調用之前的擴展代碼‘‘‘
        ret = func(*args,**kwargs)
        ‘‘‘添加函數調用之後的擴展代碼‘‘‘
        return ret
    
return inner

帶參裝飾器

F =True
def outer(flag):
    def wrapper(func):
        def inner(*args,**kwargs):
            if flag:
                print(before)
                ret = func(*args,**kwargs)
                print(after)
            else:
                ret = func(*args, **kwargs)
            
return ret return inner return wrapper

裝飾器的應用

l = []
def wrapper(func):
    l.append(func)  #統計當前程序中有多少個函數被裝飾了
    def inner(*args,**kwargs):
        #l.append(func)  #統計本次程序執行有多少個帶這個裝飾器的函數被調用了
        ret = func(*args,**kwargs)
        return ret
    return inner

裝飾器函數