python 實現帶引數的裝飾器

2021-08-20 05:24:42 字數 1299 閱讀 2340

# 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 ...