python-裝飾(高階函式)
高階函式
1、把乙個函式名當做實參傳給另外乙個函式(在不修改被裝飾函式源**)
2、返回值 中包含函式名
高階函式實現1的功能
defin the test1bar():
print("
in the bar")
deftest1(func):
print("
in the test1")
(func)
func()
#func=bar func()=bar()
test1(bar)
列印結果
---------------------------------
in the bar
#實現bar的執行時間的高階函式import
time
defbar():
time.sleep(3)
print("
in the bar")
deftest1(func):
star_time=time.time()
func()
#bar()
stop_time=time.time()
print("
the func run time is %s
"%(stop_time-star_time))
test1(bar)
列印結果
-----------------------------------
inthe bar
the func run time
is 3.0002150535583496
第二個功能實現
importtime
defbar():
time.sleep(3)
print("
int the bar")
deftest2(func):
(func)
return
func
(test2(bar))
t=test2(bar)
bar=test2(bar)
t()
#t()=bar()
(t)bar=test2(bar) #
覆蓋原來的bar
bar() #
不修改原來的呼叫方式
列印結果
——————————————————————————
int the bar
int the bar
Python高階函式 裝飾器
由於函式也是乙個物件,而且函式物件可能被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2018 4 11 f now f 2018 4 11 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...
Python 高階函式 裝飾器
裝飾器 定義裝飾器本身是乙個可呼叫物件,接收乙個函式作為引數,然後將其返回或替換成另乙個函式或可呼叫物件。可以理解成,原來那是一堵白牆,經過了一層裝飾,這層裝飾可能是漆也可能把牆掏空鑲進一層 變得金光閃閃,最後呈現在你眼前的就是裝飾後的樣子。可以把它完全當成常規函式來呼叫,其引數是另乙個函式。裝飾器...
Python函式 裝飾器高階
1.對擴充套件是開放的 為什麼要對擴充套件開放呢?我們說,任何乙個程式,不可能在設計之初就已經想好了所有的功能並且未來不做任何更新和修改。所以我們必須允許 擴充套件 新增新功能。2.對修改是封閉的 為什麼要對修改封閉呢?就像我們剛剛提到的,因為我們寫的乙個函式,很有可能已經交付給其他人使用了,如果這...