1. 程式人生 > >Python裝飾器(帶引數)

Python裝飾器(帶引數)

# encoding=utf-8
"""帶引數的裝飾器"""


def func(data_param):
    def func_outer(func_param):
        def func_inner(*args):
            if data_param == 'man':
                print("Type is man")
                func_param()
            else:
                print("Type is woman")

        return func_inner

    return
func_outer @func("man") # 等價於func_execute=func(func_execute) def func_man(): print("I am func_man") @func("woman") def func_woman(): print("I am func_man") """ 如果需要返回函式的話,帶引數的裝飾器就要寫三層內嵌函式 帶引數的裝飾器具體執行過程分為兩步:首先執行func("man"),不管中間過程,func函式返回的是函式func_outer的記憶體地址, 此時就變成了@func_outer,按照不帶引數的裝飾器的呼叫過程,此時func_outer將函式func_man的名稱當做是引數執行func_outer 裡面的函式func_inner()。另外,現在func_inner裡不僅有func_man,還有fun本身所攜帶的引數'man' """
if __name__ == '__main__': func_man() func_woman()

這裡寫圖片描述