本文介紹的是python裝飾器
的使用,分三部分記錄裝飾器,旨在為之後複習保留學習筆記。python裝飾器在沒有改變原始函式呼叫方式的同時,在原始函式的前後增加功能,滿足開放封閉原則。
目錄
1. 裝飾器的固定模板
2.帶引數的裝飾器模板
3.多個裝飾器函式裝飾乙個函式
# 裝飾器的固定模板
def inner(*args, **kwargs):
ret = f(*args, **kwargs)
return ret
return inner
def f():
pass
f()
import time
def timer(f):
def inner(*args, **kwargs):
start = time.time()
ret = f(*args, **kwargs)
end = time.time()
print(end - start)
return ret
return inner
@timer
def func(a):
time.sleep(0.01)
return '新年好'
# func = timer(func)
ret = func(1)
print(ret)
func函式是乙個有引數且有返回值的普適函式,timer是裝飾器函式,在內部f函式呼叫前後增加時間記錄功能,並列印執行時間。
注釋部分:# func = timer(func)等同於@timer操作,timer(func)函式執行後返回inner函式位址,此時的func=inner,之後ret=func(1)等同於ret=inner(1)
def inner(*args, **kwargs):
ret = func(*args, **kwargs)
return ret
return inner
def f():
pass
f()
def inner1(*args, **kwargs):
ret = func(*args, **kwargs)
return ret
return inner1
def inner2(*args, **kwargs):
ret = func(*args, **kwargs)
return ret
return inner2
def f():
print("in f")
f() # inner2()
in f
現象是:外層的裝飾器先執行,然後內層的裝飾器再執行,然後遞迴推出函式呼叫
參考文獻:
python 裝飾器的使用
使用裝飾器將函式作為引數,最後再返回乙個引數,簡單來說就是在不修改原函式的 上對原函式新增新的功能。1 在原函式中新增乙個裝飾器 原函式 def sayhello print hello,world sayhello 新增裝飾器後 import functools def decorator fun...
python裝飾器的使用
在class內部,可以有屬性和方法,而外部 可以通過直接呼叫例項變數的方法來運算元據,這樣,就隱藏了內部的複雜邏輯。但是,從前面student類的定義來看,外部 還是可以自由地修改乙個例項的name score屬性 如果要讓內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線 在python中,例...
python裝飾器的使用
它可以使我們的 看起來更簡潔,可以修改部分函式功能,讓你的 看起來很 高階 當然,它也可能會造成 的閱讀性變差,所以在使用裝飾器的時候,你需要做乙個取捨。首先來看一段 def param func return hi,im a function def decoration function pri...