根据函数是否传参 是否有返回值 ,可以分析出装饰器的四种形式:
形式一:无参无返回值
1 def outer(func): 2 def wrapper(): 3 print("装饰器功能1") 4 ret = func() 5 print("装饰器功能2") return ret 6 return wrapper 7 8 # 定义一个无参无返回值的函数 9 @outer 10 def main_func(): 11 print("hello") 12 13 main_func() # 开始执行 14 15 16 结果如下: 17 装饰器功能1 18 hello 19 装饰器功能2 20 21 进程已结束,退出代码 0
总结: 装饰器功能1 装饰器功能2 可以根据具体项目需求需要的附加功能来写具体代码,可以在原功能函数之前,也可以在其之后
形式二:无参有返回值
1 def outer(func): 2 def wrapper(): 3 print("装饰器功能1") 4 ret =func() 5 print("装饰器功能2") 6 return ret 7 return wrapper 8 9 # 定义一个无参有返回值的函数 10 @outer 11 def main_func(): 12 return "hello" 13 14 15 print(main_func() 16 17 18 结果如下: 19 装饰器功能1 20 装饰器功能2 21 hello 22 23 进程已结束,退出代码 0
总结: 装饰器功能1 装饰器功能2 可以根据具体项目需求需要的附加功能来写具体代码,可以在原功能函数之前,但不能在原功能函数之后
形式三:有参无返回值
1 def outer(func): 2 def wrapper(str1): 3 print("装饰器功能1") 4 ret =func(str1) 5 print("装饰器功能2") 6 return ret 7 return wrapper 8 9 # 定义一个有参无返回值的函数 10 @outer 11 def main_func(str1): 12 print("hello "+str1) 13 14 15 main_func("Python") 16 17 18 结果如下: 19 装饰器功能1 20 hello Python 21 装饰器功能2 22 23 进程已结束,退出代码 0
总结: 装饰器功能1 装饰器功能2 可以根据具体项目需求需要的附加功能来写具体代码,可以在原功能函数之前,也可以在其之后
形式四:有参有返回值
1 def outer(func): 2 def wrapper(str1): 3 print("装饰器功能1") 4 ret =func(str1) 5 print("装饰器功能2") 6 return ret 7 return wrapper 8 9 # 定义一个有参有返回值的函数 10 @outer 11 def main_func(str1): 12 return "hello "+str1 13 14 15 print(main_func("Python")) 16 17 18 结果如下: 19 装饰器功能1 20 装饰器功能2 21 hello Python 22 23 进程已结束,退出代码 0
总结: 装饰器功能1 装饰器功能2 可以根据具体项目需求需要的附加功能来写具体代码,可以在原功能函数之前,但不能在原功能函数之后
现在用万能装饰器来实现以上四种形式的装饰器:
1 def set_func(func): 2 def wrapper(*args,**kwargs): 3 print("装饰器功能1") 4 return func(*args,**kwargs) 5 return wrapper 6 7 @set_func 8 def show1(): 9 print("----show1----") 10 11 @set_func 12 def show2(string,n,l): 13 return ‘Hello‘ + string + str(n) + ‘:‘.join(l) 14 15 show1() 16 print(show2(‘ world ‘, 2, [‘one‘, ‘two‘, ‘three‘])) 17 18 19 结果如下: 20 装饰器功能1 21 ----show1--- 22 装饰器功能1 23 Hello world 2one:two:three 24 25 进程已结束,退出代码 0
原文地址:https://www.cnblogs.com/ywk-1994/p/9502510.html
时间: 2024-11-12 01:51:52