裝飾器應用:
裝飾器的主要作用是:列印日誌,檢測效能,資料庫事物,url路由
應用1,生成標籤
def
bold
(fn)
:def()
:# 閉包,這個函式的作用就是給原來的函式增加一些功能,
return
""
+ fn()+
""
@bold
deftest()
:return
"python"
in [2]
: test(
)out[2]
:'python'
等價於
def
(test)
:# 引數以後會是乙個函式
return
""
+ test()+
""
# 引數實際上是乙個函式
deftest()
:return
"python"
in [2]
out[2]
:'python'
應用2 日誌函式
in[2]: def log(f):
...: def wr(*args, **kwargs):
...: print(f'call () ')
...: return f(*args, **kwargs)
...: return wr
...: @log
...: def test():
...: pass
...: test()
...:
call test()
應用3 函式效能檢測
in[2]: import time
...: def perf(f):
...: def wr(*args, **kwargs):
...: start = time.time()
...: f(*args, **kwargs)
...: end = time.time()
...: print(f'call () in ')
...: return wr
...:
...: @perf
...: def test(x):
...: time.sleep(2)
...: test(3)
...:
call test() in 2.0124034881591797
應用4 連線資料庫
def link_mysql(fun):
def wr(*args, **kwargs):
with pymysql.connect(host=host, port=port, user=user, passwd=passwd, db=dbname, charset=charset) as cur:
fun(cur, *args, **kwargs)
return wr
@link_mysql
def insert_data(cur, ...):
應用5 url
url_map =
defroute
(option):#
definner
(func,
*args,
**kwargs)
: url_map[option[
'path']]
= func
return inner
#@inner --> inner(index)
@route(
)def
index
(request)
:pass
參考文獻: python裝飾器 Python 裝飾器
簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...
python中裝飾器的應用
裝飾器的概念 裝飾器的實現是函式裡面巢狀函式 裝飾器的本質是乙個函式,它可以讓其他函式在不需要做任何 改動的前提下增加額外的功能 裝飾器需要傳遞乙個函式,返回值也是乙個函式物件.裝飾器的應用場景 計時器 記錄日誌 使用者登入驗證 函式引數驗證 如圖所示,函式func1輸出時運用函式outer進行了裝...
PYTHON 裝飾器 的應用原理
今天回顧了一下裝飾器知識,來記錄一下個人的體悟.看了幾個大神的部落格,對裝飾器的解釋如下 假設我們要增強函式的功能,比如,在函式呼叫前後自動列印,但又不希望修改函式的定義,這種在 執行期間動態增加功能的方式,稱之為 裝飾器 decorator 我個人覺得說的太籠統,因為我下面的 完成了上述的要求卻不...