python函式四(裝飾器高階)

2022-07-16 13:36:11 字數 2280 閱讀 6188

一。開放封閉原則

1.對擴充套件是開放的

任何乙個程式,不可能在設計之初就已經想好了所有的功能並且未來不做任何更新和修改。所以我們必須允許**擴充套件、新增新功能。

2.對修改是封閉的

比如我們寫的乙個函式,很有可能已經交付給其他人使用了,如果這個時候我們對其進行了修改,很有可能影響其他已經在使用該函式的使用者。

裝飾器完美的遵循了開放封閉原則。

二。函式的有用資訊 

def

func():

'''本函式主要用於繪圖,實時接收資料

:return:返回給前端某標籤

'''print(func.__doc__

)

print(func.__name__

)func()

#結果:

#本函式主要用於繪圖,實時接收資料

#:return:返回給前端某標籤

#func

三。*args,**kwargs

def

def inner(*args,**kwargs):

'''執行函式前

'''ret = func(*args,**kwargs)

'''執行函式後

'''return

ret

return

inner

def func(a,b,c,d): #

接收函式時,加個*聚合

print(111)

func(1,2,3,4)

#f1(*[1,2,3,4]) #執行函式時,加個*打散

四。裝飾器高階

1.帶引數的裝飾器  

import

time

flag =false

deftimmer_out(f):

deftimmer(func):

def inner(*args,**kwargs):

'''執行函式前操作

'''if

f: start_time =time.time()

time.sleep(0.3)

ret = func(*args,**kwargs)

'''執行函式後操作

'''end_time =time.time()

print('

執行效率%s

'%(end_time -start_time))

return

ret

else

: ret = func(*args,**kwargs)

return

ret

return

inner

return

timmer

@timmer_out(flag)

#1, timmer_out(flag) 返回 timmer --->

def f1(): #

2, @timmer 就是你認識的裝飾器 f1 = timmer(f1)

print(666)

f1()

view code

2.多個裝飾器裝飾乙個函式

def

def inner1(*args,**kwargs):

'''執行函式前

'''print(222)

ret1 =func(*args,**kwargs)

'''執行函式後

'''print(333)

return

ret1

return

inner1

def

def inner2(*args,**kwargs):

'''執行函式前

'''print(555)

ret2 = func(*args,**kwargs)

'''執行函式後

'''print(666)

return

ret2

return

inner2

deffunc():

print(111)

func()##

##接著呼叫func(),即呼叫inner1()

##再根據自上而下的執行規律即可以得到結果

#輸出結果:

#222

#555

#111

#666

#333

view code

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.對修改是封閉的 為什麼要對修改封閉呢?就像我們剛剛提到的,因為我們寫的乙個函式,很有可能已經交付給其他人使用了,如果這...