函式裝飾器

2022-05-26 22:45:11 字數 3884 閱讀 6033

最簡單的裝飾器------->有返回值--------->有乙個引數---------->萬能引數

最簡單的裝飾器

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)

裝飾帶引數函式的裝飾器

import

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)

1、不想修改函式的呼叫方式,但是還想在原來的函式前後新增功能。

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 import

wraps #匯入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)

import

time

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.不帶引數裝飾器 此方式...