Python裝飾器(帶引數)
阿新 • • 發佈:2018-12-10
# 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()