一、帶引數的裝飾器;------開關
__author__ = 'administrator
'f=true
defouter(f):
def wap(fun):#
ggdef inner(*args,**kwargs):
iff:
print("
inner before")
ret=fun(*args,**kwargs)#
gg()
print("
inner after")
else
: ret=fun(*args,**kwargs)
return
ret
return
inner
return
wap@outer(f)
#先執行out(f) ----@wap----->gg=wap(gg)
defgg():
print("
gg............")
gg()
#inner()
二、多個裝飾器裝飾乙個函式
__author__ = 'administrator
'def yn(fun):#
fun=sc_inner
def yn_inner(*args,**kwargs):
print("
yun..........before")
ret=fun(*args,**kwargs)#
sc_inner()
print("
yn...........after")
return
ret
return
yn_inner
def sx(fun):#
fun=china
def sx_inner(*args,**kwargs):
print("
sx..........before")
ret=fun(*args,**kwargs)#
china()
print("
sx...........after")
return
ret
return
sx_inner
@yn
#china=yn(china)-----china=yn(sx(china))----china=yn(sx_inner)---->china=yn_ineer
@sx #
china=sx(china)----china=
defchina():
print("
china is good ")
china()
#yn_inner()
三、裝飾器的乙個應用
l =def#
統計當前程式中有多少個函式被裝飾了
def inner(*args,**kwargs):
# ret = func(*args,**kwargs)
return
ret
return
inner
#def
f1():
print('
in f1')
#def
f2():
print('
in f2')
#def
f3():
print('
in f3')
print(l)
python裝飾器 函式裝飾器,類裝飾器
只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...
python 裝飾器 函式裝飾器 類裝飾器
python函式裝飾器和類裝飾器筆記.usr bin env python coding utf 8 author ivan file decorators.py version from functools import wraps 裝飾器 目的是為了給函式新增附加功能 1.不帶引數裝飾器 此方式...
函式裝飾器 類裝飾器
一 函式裝飾函式 defwrapfun func definner a,b print function name func.name r func a,b return r return inner wrapfun defmyadd a,b return a b print myadd 2,3 二...