# coding:utf8執行過程:__author__ ='bluesli'defbefore(request,kwarg):
print('before')
defafter(request,kwarg):
print('after')
deffilter(before_fun,after_fun):
defouter(main_fun):
defbefore_ret = before_fun(request,kwarg)
ifbefore_ret!=none:
returnbefore_ret
afrer_ret = after_fun(request, kwarg)
ifafrer_ret !=none:
returnafrer_ret
main_ret = main_fun(request, kwarg)
ifafrer_ret !=none:
returnmain_ret
returnreturnouter
@filter(before,after)
defindex(request,kwarg):
print('index')
index('ll','kk')
4:(帶引數的裝飾器)裝飾器本身就會將被裝飾的函式作為引數傳入,如果我們自己定義函式再從新作為引數時怎麼辨別?:步驟:執行filter函式2:生成outer即@outer, 最後又將被裝飾函式複製成新的函式,執行新的需求;
原理就是:在裝飾器的基礎之上,進一步再向裝飾器傳引數;
複雜的裝飾器很少用到,但是這是一種框架的思想,無需考慮實現的過程,只需要具體實現功能的函式;
python 帶引數裝飾器
在前面一文 python裡為什麼需要使用裝飾器 decorator 裡,我們學習了為什麼需要裝飾器,知道裝飾器就是為了不修改原來函式的 又達到增加功能的作用。其實為了裝飾器更通用化,那麼裝飾器是否也可以帶引數呢?其實是可以的,這樣更加通用化了,達到共享極點。在前面也學習 為什麼要使用閉包 closu...
python 之 帶引數的裝飾器
from functools import wraps deflogit logfile out.log deflogging decorator func wraps func def args,kwargs log string func.name was called print log st...
python帶引數的類裝飾器
coding utf 8 author baoshan 帶引數的類裝飾器 和不帶引數的類裝飾器有很大的不同 類裝飾器的實現,必須實現 call 和 init 兩個內建函式。init 不再接收被裝飾函式,而是接收傳入引數 call 接收被裝飾函式,實現裝飾邏輯 class logger object ...