定義:
裝飾器的本質是函式,用來裝飾其他的函式,為其他的函式新增功能。
函式修飾符:
『@』 用做函式的修飾符,可以在模組或者類的定義層內對函式進行修飾,出現在函式定義的前一行,不允許和函式定義在同一行乙個修飾符就是乙個函式,它將被修飾的函式作為引數,並返回修飾後的同名函式或其他可呼叫的東西
原則:
1、不能修改被裝飾得函式的源**。
2、被修飾的函式呼叫方式不能被修改。
方法:
1.函式即變數
2.高階函式
a.把乙個函式名當做實參傳給另外乙個函式
b.返回值中包含函式名
3.巢狀函式
函式即變數:
x=1; y=2
記憶體中存入1 並賦值給x 存入2並賦值給y
def main():
。。。a code
記憶體中存入a code 賦值給main
main變數名 ()呼叫
高階函式例項a:
函式名傳入
import time
defafuction()
:print
('this is new fuction'
) time.sleep(2)
deftest1
(fuc)
:print
('in the test1'
) fuc(
)#在不改變afuction的情況下對其執行時長進行統計
start_time=time.time(
) stop_time=time.time(
)print
('the func run time is %s'
%(stop_time-start_time)
)
test1(afuction)
高階函式例項b:
覆蓋原函式,實現功能增加
import time
deffuction()
:print
('this is fuction'
) time.sleep(2)
defnwefuction
(fuc)
: fuc(
)print
('this is new fuction'
)return fuc
fuction=nwefuction(fuction)
巢狀函式例項:
import time
deftest1()
: time.sleep(3)
print
('in the test1'
)def
test2()
: time.sleep(2)
print
('in the test2'
)def
deco
(x):
defnewfuction()
: x(
) s_time=time.time(
) p_time=time.time(
)print
('spend %s doing sth'
%(p_time-s_time)
)return newfuction
test1=deco(test1)
test1(
)
最終裝飾器:@
import time
defdeco
(x):
defnewfuction()
: x(
) s_time=time.time(
) p_time=time.time(
)print
('spend %s doing sth'
%(p_time-s_time)
)return newfuction
@deco #test1=deco(test1)
deftest1()
: time.sleep(3)
print
('in the test1'
)@deco #test2=deco(test2)
deftest2()
: time.sleep(2)
print
('in the test2'
)
test1(
)test2(
)
python 高階篇 函式裝飾器和類裝飾器
簡單裝飾器 def my decorator func func def greet print hello world greet my decorator greet greet 輸出 hello world上述 在 python 中有更簡單 更優雅的表示 def my decorator fu...
Python高階函式 裝飾器
由於函式也是乙個物件,而且函式物件可能被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2018 4 11 f now f 2018 4 11 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...
Python 高階函式 裝飾器
裝飾器 定義裝飾器本身是乙個可呼叫物件,接收乙個函式作為引數,然後將其返回或替換成另乙個函式或可呼叫物件。可以理解成,原來那是一堵白牆,經過了一層裝飾,這層裝飾可能是漆也可能把牆掏空鑲進一層 變得金光閃閃,最後呈現在你眼前的就是裝飾後的樣子。可以把它完全當成常規函式來呼叫,其引數是另乙個函式。裝飾器...