說明:掌握python中裝飾器的使用
1.裝飾器解決什麼問題?
不改變函式的結構,為函式新增功能就是我們的裝飾器;在需要新增功能的函式上面加上乙個
@裝飾器即可完成對函式的功能新增。如:
@decorator
deftest()
:pass
2.裝飾器的定義與裝飾器的本質?
2.1 裝飾器的定義
deflog
(f):
def(
*args,
**kwargs)
: pring(函式執行前新增功能)
e=f(
*args,
**kwargs)
print
(函式執行後新增功能)
return e
@log =
> func=log(func)
deffunc()
:print
("我是工具函式"
)2.2 裝飾器的本質
裝飾器理解:當我們新增裝飾器到函式上時,就相當於now=log(now)這句話就是關鍵
將被的裝飾函式傳遞到裝飾器中。原函式名指向內部函式,實質就是執行的內部函式
3.裝飾器引數如何進行傳遞?
使用*args和**kwargs接受所有的引數傳遞給被裝飾行數即可,也可以自己指定,被裝飾函式
如何傳,裝飾器的定義就如何的接收
4.多個裝飾器的執行順序?
第一句話:log=func1(func2(log)
)4.1 外層函式與內層函式之間
記住第一句話,相當於初始化,底下的函式作為引數傳遞進去,肯定是先初始化的,作為引數
它肯定先有個結果才可以操作。
4.2 巢狀函式內部
記住第一句話,底下的資料作為被裝飾的資料後執行,此時上面的裝飾器先執行,下面的裝飾
器後執行
4.3 案例的展示
deffunc1
(f):
print
("out-func1"
)def
(*args,
**kwargs)
:print
("in-func1-before"
) e = f(
*args,
**kwargs)
print
("in-func1-after"
)return e
deffunc2
(f):
print
("out-func2"
)def
(*args,
**kwargs)
:print
("in-func2-before"
) e=f(
*args,
**kwargs)
print
("in-func2-after"
)return e
@func1
@func2
deflog()
:print
("列印一下日誌"
)log(
)# 執行的順序
out-func2
out-func1
in-func1-before
in-func2-before
列印一下日誌
in-func2-after
in-func1-after
相當於f
log=func1(func2(log)
) 這個是新增兩個裝飾器的情況
總結:python裝飾器的本質就是乙個變數指引轉換的操作,有點東西。 Python中裝飾器的使用
在學習cs20si中遇到了裝飾器,所以這裡介紹下裝飾器decorator的使用。主要內容依據 python中,所有的東西都是物件,乙個函式可以被賦到變數中,傳遞給另乙個函式,或者被其他函式作為返回值。python的裝飾器就是乙個函式,接受函式作為引數,並且用另乙個函式作返回值。import time...
python中裝飾器的使用
使用閉做包裝飾器 def filter func def test username,password if username admin and password 123456 func username,password else print 登入失敗 return test filter de...
python中裝飾器
對修改是封閉的,對擴充套件是開放的 import time def f1 print time.time print this is a function.def f2 print this is a function.print time.time f1 def print current tim...