Open Pin-Jiun opened 1 year ago
用來生產裝飾器的function, 可以用來接受額外的參數parameter 多層的裝飾器語法
#定義裝飾器工廠 def decorator_factory(parameter1, parameter2) #裝飾器定義 return test_decorator #裝飾器輔助的function @test_decorator(a1, a2) def f(): #function code print("普通function") #呼叫帶有裝飾器的function f()
也就是如下
#定義裝飾器工廠 def decorator_factory(parameter1, parameter2) def test_decorator(callbacl_function): def inner_function(): #裝飾器內部程式碼 print("裝飾器程式範例") callbacl_function() return inner_function return test_decorator #裝飾器輔助的function @test_decorator(a1, a2) def f(): #function code print("普通function") #呼叫帶有裝飾器的function f()
實際範例
如果沒有參數傳遞, 可以使用普通裝飾器就好 沒有參數傳遞要使用()
()
def my_factory(): def dectory(cb): def f(): print("裝飾器") cb() return f return dectory @my_factory() def g_f(): print("普通函式") g_f()
裝飾器 普通函式
此時發揮裝飾器工廠的功能:傳遞額外的參數看看
def my_factory(data): def dectory(cb): def f(): print("裝飾器", data) cb() return f return dectory @my_factory(3) def g_f(): print("普通函式") g_f()
裝飾器 3 普通函式
和callback function 進行連結
def my_factory(data): def dectory(cb): def f(): print("裝飾器") r = data*6 cb(r) return f return dectory @my_factory(10) def g_f(result): print("普通函式", result) g_f()
裝飾器 普通函式 60
#定義一個裝飾器, 計算1+2+...+max的總和 def calculactor(max): def calculate(cb): def f(): #裝飾器內部程式碼 print("裝飾器程式範例") result = 0 for i in range(max): result += i cb(result) return f return calculate #裝飾器輔助的function @calculactor(10) def show(result): #function code print("計算結果是", result) @calculactor(20) def show_in_eng(result): #function code print("Result is", result) #呼叫帶有裝飾器的function show() show_in_eng()
裝飾器程式範例 計算結果是 45 裝飾器程式範例 Result is 190
裝飾器工廠
用來生產裝飾器的function, 可以用來接受額外的參數parameter 多層的裝飾器語法
也就是如下
實際範例
如果沒有參數傳遞, 可以使用普通裝飾器就好 沒有參數傳遞要使用
()
此時發揮裝飾器工廠的功能:傳遞額外的參數看看
和callback function 進行連結