deff():
print('
2018-06-04)
#要求在每次呼叫f的時,列印『2018-06-04』前列印一句『開始』,之後列印一句『結束』
在這裡我們有兩種方法:
1,直接更改原函式**:簡單粗暴(野蠻人使用的方法)
2,使用函式裝飾器(文明人使用的方法)
1,什麼是裝飾器:
是用來擴充套件被裝飾物件功能的方法,在不改變原物件的**前提下。
解決的方法:
第一步:定義乙個裝飾器
def inner ():
print (『開始』)
ret=func ()
print ('結束『)
return ret
return inner
第二步:為被裝飾物件加上裝飾器
def f ():
print ('2018-06-04')
在呼叫f函式時會首先去執行裝飾器**。
二,當遇到兩個裝飾器或多個裝飾器時的執行順序:
例:def makebold(fun):
print('----a----')
def inner():
print('----1----')
return '' + fun() + ''
return inner
def makeitalic(fun):
print('----b----')
def inner():
print('----2----')
return '' + fun() + ''
return inner
@makebold
@makeitalic
def test():
print('----c----')
print('----3----')
return 'hello python decorator'
ret = test()
print(ret)
輸出結果為:
----b----
----a----
----1----
----2----
----c----
----3----
hello python decorator
在呼叫test函式的時候,根據上述分析,此時test指向makebold.inner函式,因此會先列印『1『,接下來,在呼叫fun()的時候,其實是呼叫的makeitalic.inner()函式,所以列印『2『,在makeitalic.inner中,呼叫的fun其實才是我們最原聲的test函式,所以列印原test函式中的『c『,『3『,所以在一層層調完之後,列印的結果為hello python decorator
。
複習裝飾器
def timefun arg pre hello def timefunc function def inner print 10086 print pre function return inner return timefunc timefun arg 100866666666 def tes...
複習 裝飾器
1 2 裝飾器的作用 3引入日誌 4函式執行時間的統計 5執行函式前預備處理 6執行函式後清理功能 7許可權校驗等場景8快取 9 1011 定義乙個函式,遵循閉包原則 函式作為引數 12def decorator func 13 定義乙個裝飾器函式 14 print func 函式開始 15def1...
python裝飾器複習
裝飾器是python中比較重要的乙個概念,要理解裝飾器,先理解下變數的作用域 閉包 閉包函式。簡單用個閉包函式舉例 def func v name hello world def function print v name return function func 參考下面的執行結果,在func 函...