最簡單的裝飾器------->有返回值--------->有乙個引數---------->萬能引數
最簡單的裝飾器
import有返回值time
deffunc():
time.sleep(1)
print("")
def timmer(f): #
裝飾器函式
definner():
start=time.time()
f()
#被裝飾的函式
end=time.time()
print(end-start)
return
inner
func=timmer(func) #
相當於inner()
func
import裝飾帶引數函式的裝飾器time
def timmer(f): #
裝飾器函式
definner():
start =time.time()
ret = f() #
被裝飾的函式
end =time.time()
print(end -start)
return
ret
return
inner
@timmer
#語法糖 @裝飾器函式名
def func(): #
被裝飾的函式
time.sleep(0.01)
print('')
return
'新年好'#
func = timmer(func)
ret = func() #
inner()
print(ret)
import1、不想修改函式的呼叫方式,但是還想在原來的函式前後新增功能。time
def timmer(f): #
裝飾器函式
def inner(*args,**kwargs):
#(1,2) /(1)
start =time.time()
ret = f(*args,**kwargs) #
f(1,2) #被裝飾的函式
end =time.time()
print(end -start)
return
ret
return
inner
@timmer
#語法糖 @裝飾器函式名
def func1(a): #
被裝飾的函式
time.sleep(0.01)
print('
',a)
return
'新年好'#
func = timmer(func)
ret = func(1,2) #
inner()
ret = func(1,b = 2) #
inner()
print(ret)
2、timmer就是乙個裝飾器函式,但是對乙個函式有一些裝飾作用。
開放:對擴充套件是開放的
封閉:對修改是封閉的
qqxing
def inner(*args,**kwargs):
ret = func(*args,**kwargs) #
被裝飾的函式
return
ret
return
inner
#def
qqxing():
print(123)
ret = qqxing() #
inner
裝飾器函式,f是被裝飾的函式
def inner(*args,**kwargs):
'''在被裝飾函式之前要做的事
'''ret = f(*args,**kwargs) #
被裝飾的函式
'''在被裝飾函式之後要做的事
'''return
ret
return
inner
#語法糖 @裝飾器函式名
def func(a,b): #
被裝飾的函式
time.sleep(0.01)
print('
',a,b)
return
'新年好
'def
definner():
pass
return inner
固定模式
from functools importwraps #匯入wraps裝飾器
func = holiday
@wraps(func)
def inner(*args,**kwargs):
print('
在被裝飾的函式執行之前做的事')
ret = func(*args,**kwargs)
print('
在被裝飾的函式執行之後做的事')
return
ret
return
inner
#def
holiday(day):
'''這是乙個放假通知
'''print('
全體放假%s天
'%day)
return
'好開心
'print(holiday.__name__) #
檢視字串格式的函式名
print(holiday.__doc__) #
document
ret = holiday(3) #
inner
print(ret)
importtime
flage =false #定義全域性變數
注意:哪個裝飾器離函式近,先執行哪個裝飾器
函式裝飾器 類裝飾器
一 函式裝飾函式 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 二...
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.不帶引數裝飾器 此方式...