from functools import wraps
from functools import wraps #引入一行@wraps(func_1) #加入一行
def inner(*args,**kwargs):
ret = func_1(*args,**kwargs)
return ret
return inner
def func_1(a):
print('來呀'+a)
return
func_1('c')
print(func_1.__name__)
如果不引入wraps,不加@wraps(func_1)時列印下面話列印出
$inner
加上引入,加@時列印
$func_1
帶引數的裝飾器
flag = truedef outter(flag):
def inner(*args,**kwargs):
if flag :
print('func_1 begin')
ret = func_1(*args,**kwargs)
print('func_1 end')
return ret
ret = func_1(*args,**kwargs)
return ret
return inner
def func_1(a):
print('來呀'+a)
return
def func_2(a):
print('來呀'+a)
return
func_1('func_1')
func_2('func_2')
@與outter(flag)兩部份兩步後語法糖轉化為:
多個裝飾器裝飾同乙個函式
def inner(*args,**kwargs):
print('func_1 begin')
ret = func_1(*args,**kwargs)
print('func_1 end')
return ret
return inner
def inner(*args,**kwargs):
print('func_2 begin')
ret = func_1(*args,**kwargs)
print('func_2 end')
return ret
return inner
def func_1(a):
print('來呀'+a)
return '哈哈'
func_1('c')
$func_2 begin
$func_1 begin
$來呀c
$func_1 end
$func_2 end
'哈哈'
python 帶引數裝飾器
在前面一文 python裡為什麼需要使用裝飾器 decorator 裡,我們學習了為什麼需要裝飾器,知道裝飾器就是為了不修改原來函式的 又達到增加功能的作用。其實為了裝飾器更通用化,那麼裝飾器是否也可以帶引數呢?其實是可以的,這樣更加通用化了,達到共享極點。在前面也學習 為什麼要使用閉包 closu...
python的帶參裝飾器
又是從做鋪墊開始 文件字串 documentation strings def add x,y this is a function for add 函式語塊第一句 一般用三引號 因為習慣是多行的文字 可以使用.doc 訪問 慣例是首寫是大寫字母 return x y print name ndoc...
python 實現帶引數的裝飾器
coding utf8 author bluesli defbefore request,kwarg print before defafter request,kwarg print after deffilter before fun,after fun defouter main fun de...