裝飾器:本質是乙個python函式,它的功能是讓其它函式在不需要做任何**變動的情況下,額外增加功能。
這篇文章寫的很好,我將鏈結位址放這裡:
小白如何一步步寫乙個簡單的裝飾器:
step1.裝飾器需要將需要裝飾的函式作為入參,下面例子中的func就代表被裝飾的函式。所以第一步就是定義乙個裝飾器函式,其引數為func。
def deco(func):
step2:第二步是定乙個返回函式,該函式用來包裝func,即乙個包括了func功能,然後同時加入了擴充套件**的返回函式。
def deco(func):
def deco(func):
func(*args, **kwargs)
def deco(func):
****** #func執行前執行的**
func(*args, **kwargs)
****** #func執行後執行的**
step 5:使用
@ deco
funcaaa()
@deco
funcbbb(ss, dd, *tuple1, **key1)
import time
def deco_time(func):
begin_time = time.time()
func(*args, **kwargs)
end_time = time.time()
process_time = (end_time - begin_time) * 1000
print("{}執行時間為{}毫秒。".format(func.__name__, process_time))
@deco_time
def sleep_1sec_func(str_for_print):
print(str_for_print)
time.sleep(1)
@deco_time
def sleep_2sec_func():
time.sleep(2)
s1 = "使用等待1秒"
sleep_1sec_func(s1)
sleep_2sec_func()
使用等待1秒
sleep_1sec_func執行時間為1000.0572204589844毫秒。
sleep_2sec_func執行時間為2000.1144409179688毫秒。
寫乙個帶引數的裝飾器:
有些情況裝飾器需要帶引數,以獲取更高的靈活度,具體的寫法步驟如下:
step1.裝飾器需要將需要裝飾的函式作為入參,下面例子中的func就代表被裝飾的函式。所以第一步就是定義乙個裝飾器函式,其引數為func。
def deco(func):
step2:第二步是定乙個返回函式,該函式用來包裝func,即乙個包括了func功能,然後同時加入了擴充套件**的返回函式。
def deco(func):
def deco(func):
func(*args, **kwargs)
step4:加上帶引數的函式
def add_para_deco(para): # para為引數
def deco(func):
func(*args, **kwargs)
return deco#注意要加返回函式deco
def add_para_deco(para): # para為引數
def deco(func):
if para = "***":
yyyyyyyy
else:
kkkkkkk
func(*args, **kwargs)
return deco #注意要加返回函式deco
step 6: 使用
@add_para_deco("***")
def sleep_1sec_func(***x):
******
import time
def log_time(timing):
def deco_time(func):
begin_time = time.asctime(time.localtime(time.time()))
func(*args, **kwargs)
end_time = time.asctime(time.localtime(time.time()))
if timing == "begin":
print("{}開始執行的時間為{}".format(func.__name__,begin_time))
elif timing == "end":
print("{}結束執行的時間為{}".format(func.__name__,end_time))
else:
print("對{}裝飾logtime時輸入的引數錯誤".format(func.__name__))
return deco_time
@log_time("end")
def sleep_1sec_func(str_for_print):
print(str_for_print)
time.sleep(1)
@log_time("begin")
def sleep_2sec_func():
time.sleep(2)
if __name__ == "__main__":
s1 = "使用等待1秒"
sleep_1sec_func(s1)
sleep_2sec_func()
Python從零開始 day9 裝飾器 1
裝飾器 作用域 高階函式,閉包 閉包 在乙個內部函式裡,對乙個外部作用域進行引用,那麼這個內部函式被認為是閉包 def f x 5 def fo 內部函式 print x 5 x是外部環境的變數 return fo fo 就是乙個閉包 f foo f 不能直接呼叫fo 函式,區域性變數,全域性變數無...
從零開始學Python
第三章 字典 1.建立字典 book 其中值可以是任意型別,可以是元組或者字典.2.dict函式建立字典 通過對映建立 book d book.dict 輸出d book 通過關鍵字建立 d dict name zq age 1 輸出d 3.字典的格式化字串 鍵 s 字典名 book name is...
從零開始學Python
第十一章 檔案操作 1.開啟檔案 用open 函式,直接用就可以。open name mode buffering 呼叫open 之後會返回乙個檔案物件,mode 模式,buffering 緩衝都是可以選擇的。f open r 檔案路徑 2.檔案模式 r 讀模式 w 寫模式 a 追加模式 b 二進位...