一。開放封閉原則
1.對擴充套件是開放的
任何乙個程式,不可能在設計之初就已經想好了所有的功能並且未來不做任何更新和修改。所以我們必須允許**擴充套件、新增新功能。
2.對修改是封閉的
比如我們寫的乙個函式,很有可能已經交付給其他人使用了,如果這個時候我們對其進行了修改,很有可能影響其他已經在使用該函式的使用者。
裝飾器完美的遵循了開放封閉原則。
二。函式的有用資訊
def三。*args,**kwargsfunc():
'''本函式主要用於繪圖,實時接收資料
:return:返回給前端某標籤
'''print(func.__doc__
)
print(func.__name__
)func()
#結果:
#本函式主要用於繪圖,實時接收資料
#:return:返回給前端某標籤
#func
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.帶引數的裝飾器
importview codetime
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()
2.多個裝飾器裝飾乙個函式
defview codedef 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
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.對修改是封閉的 為什麼要對修改封閉呢?就像我們剛剛提到的,因為我們寫的乙個函式,很有可能已經交付給其他人使用了,如果這...