裝飾器是為了再不改變函式內部結構的情況下附加給方法一些功能,就像是給方法套上了一層有功能的外殼。如果把乙個方法比作乙個人,那麼裝飾器就是它的一些工具,用不同的裝飾器可以讓這個人做不同的事,但本身外物並沒有改變人的內部結構。
裝飾器本身也是乙個函式,一般的裝飾器會涉及三個函式,我將其記為dec,wrap和func。dec是指最外層的函式,也就是裝飾器本身,而wrap是內層函式,並不執行。最後是func,指代的是被裝飾的函式。規律是dec引數是func,返回是wrap的函式名;wrap引數是func的引數,返回func(args, *args, **kargs)。用的時候只需要經過@來放在被裝飾的函式前就行了。
#coding: utf-8
def dec0(func): # 首先定義乙個dec0裝飾器,它的功能是在執行前輸出一句話
def wrap(a,b): # 外反內名,內反函式
print("it is a decorate.")
return func(a,b)
return wrap
def dec1(func): # 定義第二個裝飾器dec1
def wrap(a,b):
print("it is a decorate, too.")
return func(a,b)
return wrap
@dec1
@dec0 # 這是先執行dec0再執行dec1
def plus(a,b):
print (a + b)
return a + b
plus(1,2)
dec1(dec0(plus(1,2)))
String 一些問題
前言 等號 對於基本型別,比較的是值,對於引用型別,比較的是記憶體位址。1.在物件池中建立,如果常量池中已經存在則返回常量池中已經有的。private static void test1 結果 true 2.乙個在string pool中,乙個在堆中。private static void test...
C 一些問題
1 if else語句和switch case語句的效率分析對比 switch效率高。switch的效率與分支數無關,當只有分支比較少的時候,if效率比switch高,因為switch有跳轉表。分支比較多,那當然是switch 根據大量的實際程式測試 不考慮不同的編譯器優化程度差異,假設都是最好的優...
mysql 一些問題
1 中文亂碼 問題 推薦用 uft 8 編碼 適配一切介面,mysql中 發生中文亂碼時 開啟mysql 安裝路徑 更改後 重啟mysql 服務即可,有時也需要 重新匯入資料庫 可能是與 source 檔案時 編碼沒有設定好 client password your password port 33...