帶函式引數的裝飾器的作用就是,不用寫裝飾器了,寫函式就行了,寫函式就相當於寫裝飾器了。在第15行,對index()函式進行
裝飾,此裝飾器帶有兩個函式引數,那現在是根據python的內部語法機制傳index()函式的位址,還是傳自己寫的兩個函式記憶體
位址呢?假如沒有函式位址引數,則會對index()函式進行重新製作,把index()函式的位址作為filter()函式的引數傳給新
製作的index()函式。現在,這一行(15)是這樣執行的:
1.執行filter(before_func,after_func),把filter()函式讀到記憶體,函式執行就會後返回值,不寫return就預設返回none.現在寫的是return outer(第13行),這一步跟裝飾器沒關係。
2.返回outer之後,從函式記憶體位址的意義上說,@filter就變成了@outer.此時,@outer就是index()的裝飾器。outer()函式會把index
()函式的位址傳進來,main_func=index.
'''
'''def
login
(request,kargs)
:print
('此處新增新功能1,比如登陸許可權檢查功能。'
)return
33def
errorhandle
(request,kargs)
:print
('此處新增新功能2,比如登入報錯功能。'
)def
filter
(before_func, after_func)
:def
outer
(main_func)
:def
(request, kargs)
: before_result = before_func(request, kargs)
main_result = main_func(request, kargs)
after_result = after_func(request, kargs)
return outer
@filter(login, errorhandle)
defindex
(request, kargs)
:print
('此處是原來的未經裝飾過的函式。'
)return
'home page'
index(
'req'
,'alex'
)
帶引數的裝飾器
一 帶引數的裝飾器 import functools import time def log kind def add log fun functools.wraps fun start time time.time res fun args,kwargs end time time.time ki...
帶引數的裝飾器
usr bin python3 from inspect import signature def check type ty args,ty kwargs 通過signature方法,獲取函式形參 name,age,height sig signature func 獲得裝飾器傳來的引數,函式簽名...
裝飾器帶引數
裝飾器帶引數 帶引數的裝飾器是三層的 最外層的函式負責接受裝飾器引數 裡面的內容還是源裝飾器的內容 def outer a 第一層 負責接受引數的 defdecorate func 第二層 負責接受函式的 def wargs,kwargs 第三層 負責接受函式的引數 func wargs print...