Python编程系列---Python中装饰器的几种形式及万能装饰器
Posted YWK的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python编程系列---Python中装饰器的几种形式及万能装饰器相关的知识,希望对你有一定的参考价值。
根据函数是否传参 是否有返回值 ,可以分析出装饰器的四种形式:
形式一:无参无返回值
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
以上是关于Python编程系列---Python中装饰器的几种形式及万能装饰器的主要内容,如果未能解决你的问题,请参考以下文章