帶函式的裝飾器 多個裝飾器裝飾乙個函式

2022-05-19 15:45:11 字數 1834 閱讀 5115

一、帶引數的裝飾器;------開關

__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 二...