Python3 装饰器实现回调机制

  昨天突发奇想,试试做一个回调机制。翻了下参数化装饰器的资料,写了个玩具:

  

 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

  

猜你喜欢

转载自www.cnblogs.com/Tsuko/p/10911689.html