使用裝飾器實現如下所示的列印:
***************
***************
小白聯盟
def printequel(func1):
def inner1():
print('='*15)
func1()
return inner1
def printstar(func2):
def inner2():
print('*'*15)
func2()
return inner2
@printequel
@printstar
def myprint():
print("小白聯盟")
myprint()
執行邏輯:
①myprint = printequel(printstar(mystyle))
該步首先相當於是賦值
1)將printequel函式賦值給myprint
2)由於printequel函式的引數func1未知,需先尋找其引數,為函式printstar
3)函式printstar的引數func2 = myprint,已知,則執行printstar函式以得到func1,執行後func1 = inner2
4)知道printequel的引數func1 = inner2後執行printequel,返回inner1,此返回值賦值給myprint
5)執行②
②myprint() #執行該函式
myprint = inner1
1)執行inner1,func1為inner2,inner2中的func2為myprint函式
2)執行結束
def get_celebrator(char):
def print_style(func):
def inner():
print(char*15)
func()
return inner
return print_style
@get_celebrator('=')
@get_celebrator('*')
def myprint():
print("小白聯盟")
myprint()
執行邏輯:
1)首先執行get_celebrator(』=』),執行完後返回print_style,為了區分就叫做print_style1;
2)執行@1的裝飾,由於裝飾需要func引數,未知,故向下尋找func;
3)執行get_celebrator(「 * 」),返回print_style,稱為print_style2;
4)執行完3)返回的是乙個裝飾器,故執行@2的裝飾,即執行稱為print_style2,返回inner2,此引數為myprint;
5)2)中裝飾為完成,現知道func引數,故繼續裝飾@1,返回inner1,此引數為inner2;
6)將inner1賦值給myprint後,執行myprint();
7)執行myprint()即執行inner1。先列印『=』,後執行func函式即inner2,執行inner2先列印『*』後執行func函式即myprint。
8)執行完畢,over。
python裝飾器 裝飾器
由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...
python裝飾器 Python 裝飾器
簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...
python裝飾器 函式裝飾器,類裝飾器
只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...