昨天突发奇想,试试做一个回调机制。翻了下参数化装饰器的资料,写了个玩具:
1 # 2019-5-23 2 3 4 def callback(func_2=None, *args_, **kwargs_): 5 """ 6 三层嵌套, 第一层callback是工厂, 获取func_2和它的参数 7 decorator和inner就是正常的装饰器, 捕获func_1及其参数. 8 9 :param func_2: The callback function. 10 :param args_: Parameters of func_2. 11 :param kwargs_: Parameters of func_2. 12 :return: 13 """ 14 def decorator(func_1): 15 def inner(*args, **kwargs): 16 res = func_1(*args, **kwargs) 17 if func_2 != None: 18 func_2(*args_, **kwargs_) 19 return res 20 return inner 21 return decorator 22 23 # =============================== examples 24 25 def func_2(strg: str): 26 print("zhizhi", strg) 27 28 @callback(func_2, "guagua") 29 def func_1(): 30 print("miaomiao") 31 32 @callback(lambda x: print("-".join(x)), ["apple", "banana", "peak", "nut"]) 33 def func_3(): 34 print("a a a a") 35 36 37 func_1() 38 print("-" * 20) 39 func_3()
输出为:
miaomiao
zhizhi guagua
--------------------
a a a a
apple-banana-peak-nut
Process finished with exit code 0